博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 类与类之间的关系
阅读量:4653 次
发布时间:2019-06-09

本文共 3285 字,大约阅读时间需要 10 分钟。

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

  (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.attackclass 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=xxxlistdef __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):    passclass Department(object):    passclass 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__( )

  

  

        

  

 

 

转载于:https://www.cnblogs.com/angle6-liu/p/9936483.html

你可能感兴趣的文章
解决Cacti监控图像断断续续问题
查看>>
结构体的传参理解成员的存储方式
查看>>
python 进程与线程(理论部分)
查看>>
什么是API
查看>>
Java反射中method.isBridge() 桥接方法
查看>>
[shiro学习笔记]第二节 shiro与web融合实现一个简单的授权认证
查看>>
强名称程序集(strong name assembly)——为程序集赋予强名称
查看>>
1028. List Sorting (25)
查看>>
BZOJ 1613: [Usaco2007 Jan]Running贝茜的晨练计划
查看>>
ubuntu 重启命令,ubuntu 重启网卡方法
查看>>
Linux的学习:
查看>>
JavaScript中的原型继承原理
查看>>
Python logger模块
查看>>
jquery控制css的display(控制元素的显示与隐藏)
查看>>
关于python做人工智能的一个网页(很牛逼)
查看>>
判断控件的CGRect是否重合,获取控件的最大XY值
查看>>
POJ-1128 Frame Stacking
查看>>
python第三十九课——面向对象(二)之初始化属性
查看>>
GET请求在Tomcat中的传递及URI传递
查看>>
JavaScript 复杂判断的更优雅写法借鉴
查看>>