python 类与类之间的关系
Posted 柳帅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 类与类之间的关系相关的知识,希望对你有一定的参考价值。
一、依赖关系(紧密程度最低)
(1)简单的定义:就是方法中传递一个对象。此时类与类之间存在依赖关系,此关系比较低。
(2)实例植物大战僵尸简易版
题目要求:创建一个植物,创建一个僵尸
1、植物:名字、血量,攻击力
2、僵尸:名字、血量、攻击力
3、植物可以打僵尸,僵尸掉血
4、植物被僵尸咬,植物掉血
# 植物大战僵尸简易版 class ZhiWu:#创建植物类 def __init__(self,name,hp,attack):#初始化属性 self.name=name self.hp=hp self.attack=attack def da(self,js): js.hp-=self.attack class JiangShi:#创建僵尸类 def __init__(self,name,hp,attack):#初始化属性 self.name=name self.hp=hp self.attack=attack def eat(self,zw): zw.hp -= self.attack # 创建僵尸和植物对象 zw=ZhiWu("紫罗兰",20,10) js=JiangShi("躺尸",30,5) # 植物攻击一次 zw.da(js) print(js.hp)#20 # 僵尸攻击一次 js.eat(zw) print(zw.hp)#15
二、关联关系(组合、聚合)
1、简单的定义:两种事物必须是相互关联的,在某种特殊情况下是可以更改和更换的 。
2、聚合关系:属于关联关系中的特例,重点是xx和xx聚合成的xxx。各个零部件也可以单独工作。
3、组合关系:组合关系是比较紧密的一种关系,一损俱损。
4、常见格式(一对一或者一对多模式)
def __init__(self,name,xxxlist=None); self.name=name self.xxxlist=xxxlist def __init__(self,name,teacher=None): self.teacher=tercher
5、实例:老师和学生模型(老师对学生是一对多,学生对老师是一对一)
# 创建老师类 老师能选学生 class Teacher: def __init__(self,name,stu_lst=None): self.name=name if stu_lst:# 判断传递过来的参数是否是空 self.stu_lst=stu_lst else: self.stu_lst=[] def tianjia(self,stu):#添加学生功能 self.stu_lst.append(stu.name) def display(self):#显示老师对应的学生 for i in self.stu_lst: print(i,end=",") # 创建学生类 class Student: def __init__(self,num,name,teacher=None): self.num=num self.name=name self.techer=teacher # 创建1个老师,5个学生 t=Teacher("黄日中") s1=Student(1,"郭德纲") s2=Student(2,"岳云鹏") s3=Student(3,"张杰") s4=Student(4,"谢啦") s5=Student(5,"沈腾") # 添加学生 t.tianjia(s1) t.tianjia(s2) t.tianjia(s3) t.tianjia(s4) t.tianjia(s5) # 显示老师学生列表 t.display()#郭德纲,岳云鹏,张杰,谢啦,沈腾,
三、简单的继承
核心self:谁调用,self就是谁。
class Base: def __init__(self, num): self.num = num def func1(self): print(self.num) self.func2() def func2(self): print(111, self.num) class Foo(Base):继承 def func2(self): print(222, self.num) lst = [Base(1), Base(2), Foo(3)] for obj in lst: obj.func2() #结果111 1 111 2 222 3
class UserInfo(object): pass class Department(object): pass class StarkConfig(object): def __init__(self, num): self.num = num def changelist(self, request): print(self.num, request) def run(self): self.changelist(999) class RoleConfig(StarkConfig): #继承 StarkConfig def changelist(self, request): print(666, self.num) class AdminSite(object): def __init__(self): self._registry = {} #空字典 def register(self, k, v): self._registry[k] = v(k) site = AdminSite() site.register(UserInfo, StarkConfig) site.register(Department, RoleConfig) # site._registry{UserInfo:StarkConfig(UserInfo),Department:RoleConfig(Department)} for k, row in site._registry.items(): row.run() # UserInfo,999 666,Department
四、类里面的特殊成员
1、类名() 会自动执行__new__(cls,*args,**kwargs) 创建对象,开辟内存
2、类名()会自动执行__init__(self) 对象初始化
3、对象()会自动执行__call__( )
4、对象[key]会自动执行__getitem__( )
5、对象[k]=value 会自动执行 __setitem__( )
6、del 对象[key] 会自动执行 __delitem__( )
7、对象+对象 会自动执行 __add__( )
8、with 对象 as 变量 会自动执行 __enter__( )和__exit__( )
9、干掉hash __hash__ ==None 对象就不可以hash
10、对象可以迭代 __iter__( )
以上是关于python 类与类之间的关系的主要内容,如果未能解决你的问题,请参考以下文章