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__()       析构(删除清空对象)

  • 相关阅读:
    Linux编程 22 shell编程(输出和输入重定向,管道,数学运算命令,退出脚本状态码)
    mysql 开发进阶篇系列 46 物理备份与恢复( xtrabackup的 选项说明,增加备份用户,完全备份案例)
    mysql 开发进阶篇系列 45 物理备份与恢复(xtrabackup 安装,用户权限,配置)
    mysql 开发进阶篇系列 44 物理备份与恢复( 热备份xtrabackup 工具介绍)
    Linux编程 21 shell编程(环境变量,用户变量,命令替换)
    Linux编程 20 shell编程(shell脚本创建,echo显示信息)
    mysql 开发进阶篇系列 43 逻辑备份与恢复(mysqldump 的基于时间和位置的不完全恢复)
    Linux编程 19 编辑器(vim 用法)
    (网页)angularjs中的interval定时执行功能(转)
    (网页)在SQL Server中为什么不建议使用Not In子查询(转)
  • 原文地址:https://www.cnblogs.com/bk9527/p/9931526.html
Copyright © 2011-2022 走看看