python中简述对象和类的关系_python 类与类之间的关系

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

(1)简单的定义:就是方法中传递一个对象。此时类与类之间存在依赖关系,此关系比较低。

(2)实例植物大战僵尸简易版

题目要求:创建一个植物,创建一个僵尸

1、植物:名字、血量,攻击力

2、僵尸:名字、血量、攻击力

3、植物可以打僵尸,僵尸掉血

4、植物被僵尸咬,植物掉血

#植物大战僵尸简易版

class ZhiWu:#创建植物类

def __init__(self,name,hp,attack):#初始化属性

self.name=name

self.hp=hp

self.attack=attackdefda(self,js):

js.hp-=self.attackclass JiangShi:#创建僵尸类

def __init__(self,name,hp,attack):#初始化属性

self.name=name

self.hp=hp

self.attack=attackdefeat(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=xxxlistdef __init__(self,name,teacher=None):

self.teacher=tercher

5、实例:老师和学生模型(老师对学生是一对多,学生对老师是一对一)

#创建老师类 老师能选学生

classTeacher:def __init__(self,name,stu_lst=None):

self.name=nameifstu_lst:# 判断传递过来的参数是否是空

self.stu_lst=stu_lstelse:

self.stu_lst=[]def tianjia(self,stu):#添加学生功能

self.stu_lst.append(stu.name)def display(self):#显示老师对应的学生

for i inself.stu_lst:print(i,end=",")#创建学生类

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

classBase:def __init__(self, num):

self.num=numdeffunc1(self):print(self.num)

self.func2()deffunc2(self):print(111, self.num)classFoo(Base):继承deffunc2(self):print(222, self.num)

lst= [Base(1), Base(2), Foo(3)]for obj inlst:

obj.func2()#结果111 1 111 2 222 3

classUserInfo(object):pass

classDepartment(object):pass

classStarkConfig(object):def __init__(self, num):

self.num=numdefchangelist(self, request):print(self.num, request)defrun(self):

self.changelist(999)class RoleConfig(StarkConfig): #继承 StarkConfig

defchangelist(self, request):print(666, self.num)classAdminSite(object):def __init__(self):

self._registry= {} #空字典

defregister(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 insite._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__( )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值