当前位置:首页>编程日记>正文

Python面向对象进阶及类成员

再次了解多继承

先来一段代码

  1. #!/usr/bin/env python

  2. # _*_ coding:utf-8 _*_

  3. class A:

  4.    def bar(self):

  5.        print("BAR")

  6.        self.f1()

  7. class B(A):

  8.    def f1(self):

  9.        print("B")

  10. class C:

  11.        print("C")

  12. class D(C, B):

  13.    pass

  14. obj = D()

  15. obj.bar()

执行结果

  1. /usr/bin/python3.5 /home/ansheng/文档/Python_code/sublime/Week06/Day03/s1.py

  2. BAR

  3. C

  4. Process finished with exit code 0

流程释意:

  1. 创建了类A、B、C、D;

  2. D继承了CBB继承了AD内什么都不做,pass

  3. 创建一个对象obj,类是D,当执行Dbar方法的时候会先从C里面寻找有没有bar方法;

  4. C内没有bar方法,然后继续从B里面查找,B里面也没有,B的父类是AA里面有bar方法,所以就执行了Abar方法;

  5. Abar方法首先输出了BAR

  6. 然后又执行了self.f1()self=obj,相当于执行了obj.f1()

  7. 执行obj.f1()的时候先从C里面查找有没有f1这个方法,C里面又f1这个方法;

  8. 最后就执行C里面的f1方法了,输出了C

执行父类的构造方法

  1. lass Annimal:

  2.    def __init__(self):

  3.        print("Annimal的构造方法")

  4.        self.ty = "动物"

  5. class Cat(Annimal):

  6.    def __init__(self):

  7.        print("Cat的构造方法")

  8.        self.n = "猫"

  9.        # 寻找Cat类的父类,然后执行父类的构造方法

  10.        super(Cat, self).__init__()

  11. mao = Cat()

  12. print(mao.__dict__)

    1. /usr/bin/python3.5 /home/ansheng/文档/Python_code/sublime/Week06/Day03/s1.py

    2. Cat的构造方法

    3. Annimal的构造方法

    4. {'ty': '动物', 'n': '猫'}

    5. Process finished with exit code 0

    先执行了Cat的构造方法,然后又执行了Annimal的构造方法。
    第二种执行父类的方法如下:

    1. Annimal.__init__(self)

    不推荐使用

    利用反射查看面向对象成员归属

    1. #!/usr/bin/env python

    2. class Foo:

    3.    def __init__(self, name):

    4.        self.name = name

    5.    def show(self):

    6.        print('show')

    7. obj = Foo("as")

    8. # 如果是类,就只能找到类里的成员

    9. print(hasattr(Foo, "show"))

    10. # 如果是对象,既可以找到对象,也可以找类里的成员

    11. print(hasattr(obj, "name"))

    12. print(hasattr(obj, "show"))

      1. /usr/bin/python3.5 /home/ansheng/文档/Python_code/sublime/Week06/Day03/s2.py

      2. True

      3. True

      4. Process finished with exit code 0

      利用反射导入模块、查找类、创建对象、查找对象中的字段

      s1脚本文件内容:

    13. # _*_coding:utf-8 _*_

    14. # 导入模块

    15. m = __import__('s2', fromlist=True)

    16. # 去模块中找类

    17. class_name = getattr(m, "Foo")

    18. # 根据类创建对象

    19. obj = class_name("ansheng")

    20. # 去对象中找name对应的值

    21. print(getattr(obj, 'name')

    s2脚本文件内容

  13.        # 普通字段,保存在对象中

  14.        self.name = name

    1. /usr/bin/python3.5 /home/ansheng/文档/Python_code/sublime/Week06/Day04/s1.py

    2. ansheng

    面向对象类成员之静态字段

    静态字段存在类中,如下:

  15. # 静态字段存在的意义就是将每个对象中重复的东西在类里面保存一份即可,这就是静态字段

  16. class Provice:

  17.    # 静态字段

  18.    contry = "China"

  19.        print(Provice.contry, self.name)

  20. hebei = Provice("河北")

  21. hebei.show()

  22. hubei = Provice("湖北")

  23. hubei.show()

    1. /usr/bin/python3.5 /home/ansheng/文档/Python_code/sublime/Week06/Day04/s2.py

    2. China 河北

    3. China 湖北

    类里面的成员类去访问,对象内的成员用对象去访问。

    面向对象类成员之静态方法

    1. #!/usr/bin/env python

    2.    # 静态方法括号内没有self,切方法前一行要加上@staticmethod

    3.    @staticmethod

    4.    def static():

    5.    # def static(arg1, arg2): # 也可以设置参数

    6.        print("static")

    7. # 静态方法通过类名+方法名既可执行

    8. Foo.static()

    9. # Foo.static("arg1", "arg2") 通过类调用的时候传入对于的参数即可

    10. # 静态方法也可以通过对象去访问,对于静态方法用类去访问

    11. obj = Foo()

    12. obj.static()

    13. static

    14. static

    面向对象类成员之类方法

    1. #!/usr/bin/env python

    2.    # 创建类方法的时候需要在方法前面加上@classmethod

    3.    @classmethod

    4.    def ClassMethod(cls): # 并且方法的括号内必须带有cls关键字,类方法的参数是当前类的类名

    5.        print("类方法")

    6. # 调用类方法

    7. Foo.ClassMethod()

    执行结果:

  24. 类方法

面向对象类成员内容梳理

字段

1.静态字段(每个对象都有一份)
2.普通字段(每个对象都不同的数据)

方法

1.静态方法(无需使用对象封装的内容)
2.类方法
3.普通方法(适用对象中的数据)

特性

1.普通特性(将方法未造成字段)

快速判断,类执行、对象执行:

1.self —> 对象调用
2.无self —> 类调用



http://www.coolblog.cn/news/29e8fbb51aec7756.html

相关文章:

  • asp多表查询并显示_SpringBoot系列(五):SpringBoot整合Mybatis实现多表关联查询
  • s7day2学习记录
  • 【求锤得锤的故事】Redis锁从面试连环炮聊到神仙打架。
  • 矿Spring入门Demo
  • 拼音怎么写_老师:不会写的字用圈代替,看到孩子试卷,网友:人才
  • Linux 实时流量监测(iptraf中文图解)
  • Win10 + Python + GPU版MXNet + VS2015 + RTools + R配置
  • 美颜
  • shell访问php文件夹,Shell获取某目录下所有文件夹的名称
  • 如何优雅的实现 Spring Boot 接口参数加密解密?
  • LeCun亲授的深度学习入门课:从飞行器的发明到卷积神经网络
  • Mac原生Terminal快速登录ssh
  • java受保护的数据与_Javascript类定义语法,私有成员、受保护成员、静态成员等介绍...
  • mysql commit 机制_1024MySQL事物提交机制
  • 支撑微博千亿调用的轻量级RPC框架:Motan
  • jquery 使用小技巧
  • 2019-9
  • 法拉利虚拟学院2010 服务器,法拉利虚拟学院2010
  • vscode pylint 错误_将实际未错误的py库添加到pylint白名单
  • 科学计算工具NumPy(3):ndarray的元素处理
  • 工程师在工作电脑存 64G 不雅文件,被公司开除后索赔 41 万,结果…
  • linux批量创建用户和密码
  • newinsets用法java_Java XYPlot.setInsets方法代碼示例
  • js常用阻止冒泡事件
  • 气泡图在开源监控工具中的应用效果
  • 各类型土地利用图例_划重点!国土空间总体规划——土地利用
  • php 启动服务器监听
  • dubbo简单示例
  • 【设计模式】 模式PK:策略模式VS状态模式
  • [iptables]Redhat 7.2下使用iptables实现NAT
  • Ubuntu13.10:[3]如何开启SSH SERVER服务
  • CSS小技巧——CSS滚动条美化
  • JS实现-页面数据无限加载
  • 阿里巴巴分布式服务框架 Dubbo
  • 最新DOS大全
  • Django View(视图系统)
  • 阿里大鱼.net core 发送短信
  • 程序员入错行怎么办?
  • 两张超级大表join优化
  • 第九天函数
  • Linux软件安装-----apache安装
  • HDU 5988 最小费用流
  • Sorenson Capital:值得投资的 5 种 AI 技术
  • 《看透springmvc源码分析与实践》读书笔记一
  • 正式开课!如何学习相机模型与标定?(单目+双目+鱼眼+深度相机)
  • Arm芯片的新革命在缓缓上演
  • nagios自写插件—check_file
  • python3 错误 Max retries exceeded with url 解决方法
  • 行为模式之Template Method模式
  • 通过Spark进行ALS离线和Stream实时推荐