hm_01_第一个面向对象.py
class Cat: def eat(self): print("小猫爱吃鱼") def drink(self): print("小猫要喝水") # 创建猫对象 tom = Cat() tom.eat() tom.drink() print(tom) addr = id(tom) print("%x" % addr)
hm_02_新建两个猫对象.py
class Cat: def eat(self): print("小猫爱吃鱼") def drink(self): print("小猫要喝水") # 创建猫对象 tom = Cat() tom.eat() tom.drink() print(tom) # 再创建一个猫对象 lazy_cat = Cat() lazy_cat.eat() lazy_cat.drink() print(lazy_cat) lazy_cat2 = lazy_cat print(lazy_cat2)
hm_03_设置对象属性_self.py
class Cat: def eat(self): # 哪一个对象调用的方法,self就是哪一个对象的引用 print("%s 爱吃鱼" % self.name) def drink(self): print("%s 要喝水" % self.name) # 创建猫对象 tom = Cat() # 可以使用 .属性名 利用赋值语句就可以了 tom.name = "Tom" tom.eat() tom.drink() print(tom) # 再创建一个猫对象 lazy_cat = Cat() lazy_cat.name = "大懒猫" lazy_cat.eat() lazy_cat.drink() print(lazy_cat)
hm_04_在外界设置属性的问题.py
class Cat: def eat(self): # 哪一个对象调用的方法,self就是哪一个对象的引用 print("%s 爱吃鱼" % self.name) def drink(self): print("%s 要喝水" % self.name) # 创建猫对象 tom = Cat() # 可以使用 .属性名 利用赋值语句就可以了 # tom.name = "Tom" tom.eat() tom.drink() tom.name = "Tom"
hm_05_初始化方法.py
class Cat: def __init__(self): print("这是一个初始化方法") # self.属性名 = 属性的初始值 self.name = "Tom" def eat(self): print("%s 爱吃鱼" % self.name) # 使用类名()创建对象的时候,会自动调用初始化方法 __init__ tom = Cat() print(tom.name)
hm_06_利用参数设置属性初始值.py
class Cat: def __init__(self, new_name): print("这是一个初始化方法") # self.属性名 = 属性的初始值 # self.name = "Tom" self.name = new_name def eat(self): print("%s 爱吃鱼" % self.name) # 使用类名()创建对象的时候,会自动调用初始化方法 __init__ tom = Cat("Tom") print(tom.name) lazy_cat = Cat("大懒猫") lazy_cat.eat()
hm_07___del__方法.py
class Cat: def __init__(self, new_name): self.name = new_name print("%s 来了" % self.name) def __del__(self): print("%s 我去了" % self.name) # tom 是一个全局变量 tom = Cat("Tom") print(tom.name) # del 关键字可以删除一个对象 del tom print("-" * 50)
hm_08___str__方法.py
class Cat: def __init__(self, new_name): self.name = new_name print("%s 来了" % self.name) def __del__(self): print("%s 我去了" % self.name) def __str__(self): # 必须返回一个字符串 return "我是小猫[%s]" % self.name # tom 是一个全局变量 tom = Cat("Tom") print(tom)
hm_09_小明爱跑步.py
class Person: def __init__(self, name, weight): # self.属性 = 形参 self.name = name self.weight = weight def __str__(self): return "我的名字叫 %s 体重是 %.2f 公斤" % (self.name, self.weight) def run(self): print("%s 爱跑步,跑步锻炼身体" % self.name) self.weight -= 0.5 def eat(self): print("%s 是吃货,吃完这顿再减肥" % self.name) self.weight += 1 xiaoming = Person("小明", 75.0) xiaoming.run() xiaoming.eat() print(xiaoming)
hm_10_小明爱跑步扩展.py
class Person: def __init__(self, name, weight): # self.属性 = 形参 self.name = name self.weight = weight def __str__(self): return "我的名字叫 %s 体重是 %.2f 公斤" % (self.name, self.weight) def run(self): print("%s 爱跑步,跑步锻炼身体" % self.name) self.weight -= 0.5 def eat(self): print("%s 是吃货,吃完这顿再减肥" % self.name) self.weight += 1 xiaoming = Person("小明", 75.0) xiaoming.run() xiaoming.eat() print(xiaoming) # 小美爱跑步 xiaomei = Person("小美", 45) xiaomei.eat() xiaomei.run() print(xiaomei) print(xiaoming)
hm_11_摆放家具_01_家具类.py
class HouseItem: def __init__(self, name, area): self.name = name self.area = area def __str__(self): return "[%s] 占地 %.2f" % (self.name, self.area) # 1. 创建家具 bed = HouseItem("席梦思", 4) chest = HouseItem("衣柜", 2) table = HouseItem("餐桌", 1.5) print(bed) print(chest) print(table)
hm_12_摆放家具_02_房子类.py
class HouseItem: def __init__(self, name, area): self.name = name self.area = area def __str__(self): return "[%s] 占地 %.2f" % (self.name, self.area) class House: def __init__(self, house_type, area): self.house_type = house_type self.area = area # 剩余面积 self.free_area = area # 家具名称列表 self.item_list = [] def __str__(self): # Python 能够自动的将一对括号内部的代码连接在一起 return ("户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s" % (self.house_type, self.area, self.free_area, self.item_list)) def add_item(self, item): print("要添加 %s" % item) # 1. 创建家具 bed = HouseItem("席梦思", 4) chest = HouseItem("衣柜", 2) table = HouseItem("餐桌", 1.5) print(bed) print(chest) print(table) # 2. 创建房子对象 my_home = House("两室一厅", 60) my_home.add_item(bed) my_home.add_item(chest) my_home.add_item(table) print(my_home)
hm_13_摆放家具_03_添加家具.py
class HouseItem: def __init__(self, name, area): self.name = name self.area = area def __str__(self): return "[%s] 占地 %.2f" % (self.name, self.area) class House: def __init__(self, house_type, area): self.house_type = house_type self.area = area # 剩余面积 self.free_area = area # 家具名称列表 self.item_list = [] def __str__(self): # Python 能够自动的将一对括号内部的代码连接在一起 return ("户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s" % (self.house_type, self.area, self.free_area, self.item_list)) def add_item(self, item): print("要添加 %s" % item) # 1. 判断家具的面积 if item.area > self.free_area: print("%s 的面积太大了,无法添加" % item.name) return # 2. 将家具的名称添加到列表中 self.item_list.append(item.name) # 3. 计算剩余面积 self.free_area -= item.area # 1. 创建家具 bed = HouseItem("席梦思", 40) chest = HouseItem("衣柜", 2) table = HouseItem("餐桌", 20) print(bed) print(chest) print(table) # 2. 创建房子对象 my_home = House("两室一厅", 60) my_home.add_item(bed) my_home.add_item(chest) my_home.add_item(table) print(my_home)
hm_14_士兵突击_01_枪类.py
class Gun: def __init__(self, model): # 1. 枪的型号 self.model = model # 2. 子弹的数量 self.bullet_count = 0 def add_bullet(self, count): self.bullet_count += count def shoot(self): # 1. 判断子弹数量 if self.bullet_count <= 0: print("[%s] 没有子弹了..." % self.model) return # 2. 发射子弹,-1 self.bullet_count -= 1 # 3. 提示发射信息 print("[%s] 突突突... [%d]" % (self.model, self.bullet_count)) # 1. 创建枪对象 ak47 = Gun("AK47") ak47.add_bullet(50) ak47.shoot()
hm_15_士兵突击_02_士兵类.py
class Gun: def __init__(self, model): # 1. 枪的型号 self.model = model # 2. 子弹的数量 self.bullet_count = 0 def add_bullet(self, count): self.bullet_count += count def shoot(self): # 1. 判断子弹数量 if self.bullet_count <= 0: print("[%s] 没有子弹了..." % self.model) return # 2. 发射子弹,-1 self.bullet_count -= 1 # 3. 提示发射信息 print("[%s] 突突突... [%d]" % (self.model, self.bullet_count)) class Soldier: def __init__(self, name): # 1. 姓名 self.name = name # 2. 枪 - 新兵没有枪 self.gun = None # 1. 创建枪对象 ak47 = Gun("AK47") ak47.add_bullet(50) ak47.shoot() # 2. 创建许三多 xusanduo = Soldier("许三多") xusanduo.gun = ak47 print(xusanduo.gun)
hm_16_士兵突击_03_士兵开火.py
class Gun: def __init__(self, model): # 1. 枪的型号 self.model = model # 2. 子弹的数量 self.bullet_count = 0 def add_bullet(self, count): self.bullet_count += count def shoot(self): # 1. 判断子弹数量 if self.bullet_count <= 0: print("[%s] 没有子弹了..." % self.model) return # 2. 发射子弹,-1 self.bullet_count -= 1 # 3. 提示发射信息 print("[%s] 突突突... [%d]" % (self.model, self.bullet_count)) class Soldier: def __init__(self, name): # 1. 姓名 self.name = name # 2. 枪 - 新兵没有枪 self.gun = None def fire(self): # 1. 判断士兵是否有枪 # if self.gun == None: if self.gun is None: print("[%s] 还没有枪..." % self.name) return # 2. 高喊口号 print("冲啊...[%s]" % self.name) # 3. 让枪装填子弹 self.gun.add_bullet(50) # 4. 让枪发射子弹 self.gun.shoot() # 1. 创建枪对象 ak47 = Gun("AK47") # 2. 创建许三多 xusanduo = Soldier("许三多") xusanduo.gun = ak47 xusanduo.fire() print(xusanduo.gun)
hm_17_私有属性和方法.py
class Women: def __init__(self, name): self.name = name self.__age = 18 def __secret(self): # 在对象的方法内部,是可以访问对象的私有属性的 print("%s 的年龄是 %d" % (self.name, self.__age)) xiaofang = Women("小芳") # 私有属性,在外界不能够被直接访问 # print(xiaofang.__age) # 私有方法,同样不允许在外界直接访问 # xiaofang.__secret()
hm_18_伪私有属性和方法.py
class Women: def __init__(self, name): self.name = name self.__age = 18 def __secret(self): # 在对象的方法内部,是可以访问对象的私有属性的 print("%s 的年龄是 %d" % (self.name, self.__age)) xiaofang = Women("小芳") # 伪私有属性,在外界不能够被直接访问 print(xiaofang._Women__age) # 伪私有方法,同样不允许在外界直接访问 xiaofang._Women__secret()