zoukankan      html  css  js  c++  java
  • 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__()       析构(删除清空对象)

  • 相关阅读:
    Mybatis如何插入空字段
    为什么要将action实例设置为多例
    hibernate dynamic-update="true"属性不起作用原因(转载)
    查找到匹配的进程并关闭 linux ps -ef
    Mac 下解决修改IntelliJ IDEA 由于修改配置之后无法启动问题
    再聊移动端页面的适配
    重学前端
    前端面试
    使用Flexible实现手淘H5页面的终端适配
    vue-cli3.0 使用px2rem 或 postcss-plugin-px2rem
  • 原文地址:https://www.cnblogs.com/bk9527/p/9931526.html
Copyright © 2011-2022 走看看