今日所学内容:
1.类与类之间的关系
2.self 到底是谁?
3. 特殊成员 :
1.类与类之间的关系
在我们的世界中事物和事物之前总会有一些联系
在面向对象中,类与类之间也可以产生相关的联系
1) 依赖关系(类比于玩游戏,玩游戏必须依赖另一个东西,需要手机) 但是这种关系是很弱的,不是唯一的,我可以借助于手机,也可以借助于电脑,psp游戏机,依赖关系是类与类关系最弱的一种关系
依赖关系实际是一个对象依赖于另一个对象 ,是关系最弱的
# 写一个植物大战僵尸 # 1. 植物 # 打僵尸. 僵尸掉血 # 2. 僵尸 # 吃植物. 植物掉血 class Plant: #创建植物类 def __init__(self,name,hp,ad): self.name=name self.hp=hp self.ad=ad def gongji(self,js): #定义植物攻击的方法 js.hp-=self.ad # 计算植物攻击一次僵尸剩余的血量 print(f'{self.name}攻击了僵尸{self.ad}的血量,僵尸剩余{js.hp}的血量') class jiangshi: # 创建僵尸类 def __init__(self,name,hp,ad): self.name=name self.hp=hp self.ad=ad def gongji(self,zw): #定义僵尸攻击方法 zw.hp=self.ad # 计算僵尸攻击一次植物剩余的血量 print(f'{self.name}攻击了植物{self.ad}的血量,植物剩余{zw.hp}的血量') wd=Plant('豌豆射手',10,3) tt=jiangshi('铁桶僵尸',30,3) wd.gongji(tt) #豌豆射手攻击铁桶僵尸 tt.gongji(wd) # 铁桶僵尸攻击豌豆射手
写一个老师上课
teacher_list = [] # 准备一个列表装老师 class school: # 创建一个学校类 def __init__(self,name): # 学校的名字 self.name=name def zhaopin(self,teacher): #学校招聘老师 teacher_list.append(teacher) def gongzuo(self): #学校让老师工作 for t in teacher_list: #准备让每一个老师工作 t.work() class teacher: # 创建一个老师类 def __init__(self,name): # 创建老师的名字 self.name=name def work(self): #老师工作 ,上课 print(f'{self.name}老师在上课') xx=school('老男孩') #创建一个学校 ls1=teacher('alex') #创建老师 ls2=teacher('wusir') ls3=teacher('太白') xx.zhaopin(ls1) # 学校招聘老师 xx.zhaopin(ls2) xx.zhaopin(ls3) ls1.work() #老师工作 ls2.work() ls3.work()
2) 关联关系 (一对一 ,一对多 ,多对多)
#男女朋友关系 (一对一) class boy: #创建一个男孩类 def __init__(self,name,girlfriend=None): self.name=name def chi(self): #男孩吃 if self.girlfriend: #判断男孩有没有男朋友 print(f'我今天带着{self.gorlfriend.name}去吃饭') #女朋友的名字 else: print('吃什么吃,滚去学习') def movie(self): #同上 if self.girlfriend: print(f'我今天带着{self.gorlfriend.name}去看电影') else: print('看什么看,滚去学习') class girl: def __init__(self,name): self.name=name b=boy('alex') g=girl('志玲') b.girlfriend=g b.chi() g2=gir('心如') #换了一个女朋友 b.girlfriend=g2 b.chi() # 带着新女朋友去吃饭
3) 继承关系 最硬的关系 ,我用过了就是我的
# class Base: # def chi(self): # print("我会吃") # # 派生类 => 子类 # class Foo(Base): # 这个类继承了Base类. Foo类是对Base的一个扩展 # def he(self): # print("我会喝") # f = Foo() # f.chi() # f.he() # class Cat: # 父类 => 基类 => 超类 # def catch_mouse(self): # print("猫可以抓老鼠") # class BosiCat(Cat): # 子类 => 派生类 # pass # class Foo: # pass # # print(hash(Foo)) # 可哈希 # print(hash(Foo())) # 我们写好的类和创建的对象默认都是可哈希的 # 去掉可哈希 # class Foo: # __hash__ = None # 当前类的对象不可哈希 # print(hash(Foo)) # 可哈希 # print(hash(Foo())) # TypeError: unhashable type: 'Foo' # class Foo: # def chi(self, food): # print("我爱吃鱼和", food) # # class Bar: # def chi(self, food): # print("我爱吃肉和", food) # # dic = {Foo: "鸡蛋", Bar: "香肠"} # # for k, v in dic.items(): # k().chi(v)
2.self 到底是谁?
self : 谁调用的就是谁的,类型是根据调用方的对象来进行变换的
super: 表示的是父类
3. 特殊成员 :
__init__() #创建对象时初始化对象
__call__() # 对象的调用 ,小括号调用的时候走这句话
__getitem__() # 对象调用的时候默认执行 对象[ ]的时候使用
__setitem__()# 对象调用的时候使用这句 对象[ ]=" "的时候使用
__new__() # 开拓内存
__enter__() # with对象的时候
__exit__() #with对象结束的时候使用
__hash__() # 去除 可哈希 hash()