python摸爬滚打之day17----类与类之间的关系

1、类与类之间的联系

 1.1  依赖关系

   类A中使用了类B, 类B作为参数传进类A的方法中被使用. 这种关系中类与类之间的联系是最轻的. 

 1 class Elephant:
 2 
 3     def open(self,ele):             # ele 接收的是一个BingXiang的对象
 4         print("我是大象,我会开门")         
 5         ele.kai()
 6 
 7     def jinqu(self):
 8         print("我是大象,我会自己进封闭容器")
 9 
10     def close(self,ele):
11         print("我是大象,我会关门")
12         ele.guan()
13 
14 
15 class BingXiang:
16 
17     def kai(self):
18         print("我是冰箱,我会替别人开门")
19 
20     def guan(self):
21         print("我是冰箱,我会替别人关门")
22 
23 
24 class DianFanBao:
25 
26     def kai(self):
27         print("我是电饭煲,我会替别人开门")
28 
29     def guan(self):
30         print("我是电饭煲,我会替别人关门")
31 
32 
33 bx = BingXiang()
34 dfb = DianFanBao()
35 e = Elephant()
36 e.open(bx)
37 e.jinqu()
38 e.close(dfb)
依赖关系

 1.2 关联关系(组合关系,聚合关系)

   三种关系写法是一样的, 但意义是不一样的.

  关联关系: 类A和类B是互相关联的, 类A中使用了类B, 类B成为类A中的属性或成员. 关系程度要比依赖关系强点. 

 1 class Teacher:
 2 
 3     def __init__(self,name,lst=None):
 4         self.name = name
 5         if lst == None:
 6             self.lst = []
 7         else:
 8             self.lst = lst
 9 
10     def add_sd(self,obj):
11         self.lst.append(obj)       # 将这几个学生对象添加进self.lst这个老师类的字段中,成为该属性的一部分.
12 
13 
14 class Student:
15 
16     def __init__(self,name,numb,score):
17         self.name = name
18         self.numb = numb
19         self.score = score
20 
21 s1 = Student("王大锤",1001,95)
22 s2 = Student("李二炮",1003,90)
23 s3 = Student("马老五",1004,88)
24 t = Teacher("张老师",[Student("二壮",1010,99)])
25 t.add_sd(s1)
26 t.add_sd(s2)
27 t.add_sd(s3)
28 for i in t.lst:
29     print(i.name)
关联关系

 1.3  继承关系

   见后续. 

2、特殊成员方法

  __new__()  构造方法, 在创建对象内存时调用.

  __init__()  初始化方法, 往创建好的对象内存里存数据

  __call__()  对象()时会被调用.

  __dict__()      将类或者对象内存空间里的全部属性打包成字典的形式.

    类: 有各种内部属性, 内部方法和一些静态字段, 方法之类的.

    对象: 在自己的内存空间里只有自己的字段.

  __str__()  在打印一个对象时默认会执行__str__()方法, 根据返回的结果进行打印.

  __int__()   数据int()调用

  __repr__()  一个字符串的官方表示形式

  __getitem__()  对象[key]自动调用

  __setitem__()  对象[key] = value自动调用

  __delitem__()  del  对象[key]时调用

  __enter__()  with打开文件时调用

  __exit__()  with关闭文件时调用

  __add__()  两个对象相加

  __len__()  len(对象)时调用

  __iter__()  for循环时调用

  __hash__()  哈希时调用

  __lt__()     小于

   __gt__()  大于

  __le__()  小于等于

  __ge__()  大于等于

  __del__()       析构(删除清空对象)

原文地址:https://www.cnblogs.com/bk9527/p/9931526.html