一、依赖关系(紧密程度最低)

(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就是谁。

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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__( )​