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.    def f1(self):
  12.        print("C")
  13. class D(C, B):
  14.    pass
  15. obj = D()
  16. 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. # _*_ coding:utf-8 _*_
  3. class Foo:
  4.    def __init__(self, name):
  5.        self.name = name
  6.    def show(self):
  7.        print(‘show‘)
  8. obj = Foo("as")
  9. # 如果是类,就只能找到类里的成员
  10. print(hasattr(Foo, "show"))
  11. # 如果是对象,既可以找到对象,也可以找类里的成员
  12. print(hasattr(obj, "name"))
  13. print(hasattr(obj, "show"))

执行结果

  1. /usr/bin/python3.5 /home/ansheng/文档/Python_code/sublime/Week06/Day03/s2.py
  2. True
  3. True
  4. True
  5. Process finished with exit code 0

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

s1脚本文件内容:

  1. #!/usr/bin/env python
  2. # _*_coding:utf-8 _*_
  3. # 导入模块
  4. m = __import__(‘s2‘, fromlist=True)
  5. # 去模块中找类
  6. class_name = getattr(m, "Foo")
  7. # 根据类创建对象
  8. obj = class_name("ansheng")
  9. # 去对象中找name对应的值
  10. print(getattr(obj, ‘name‘)

s2脚本文件内容

  1. #!/usr/bin/env python
  2. # _*_coding:utf-8 _*_
  3. class Foo:
  4.    def __init__(self, name):
  5.        # 普通字段,保存在对象中
  6.        self.name = name

执行结果

  1. /usr/bin/python3.5 /home/ansheng/文档/Python_code/sublime/Week06/Day04/s1.py
  2. ansheng
  3. Process finished with exit code 0

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

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

  1. #!/usr/bin/env python
  2. # _*_coding:utf-8 _*_
  3. # 静态字段存在的意义就是将每个对象中重复的东西在类里面保存一份即可,这就是静态字段
  4. class Provice:
  5.    # 静态字段
  6.    contry = "China"
  7.    def __init__(self, name):
  8.        self.name = name
  9.    def show(self):
  10.        print(Provice.contry, self.name)
  11. hebei = Provice("河北")
  12. hebei.show()
  13. hubei = Provice("湖北")
  14. hubei.show()

执行结果

  1. /usr/bin/python3.5 /home/ansheng/文档/Python_code/sublime/Week06/Day04/s2.py
  2. China 河北
  3. China 湖北
  4. Process finished with exit code 0

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

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

  1. #!/usr/bin/env python
  2. # _*_coding:utf-8 _*_
  3. class Foo:
  4.    # 静态方法括号内没有self,切方法前一行要加上@staticmethod
  5.    @staticmethod
  6.    def static():
  7.    # def static(arg1, arg2): # 也可以设置参数
  8.        print("static")
  9. # 静态方法通过类名+方法名既可执行
  10. Foo.static()
  11. # Foo.static("arg1", "arg2") 通过类调用的时候传入对于的参数即可
  12. # 静态方法也可以通过对象去访问,对于静态方法用类去访问
  13. obj = Foo()
  14. obj.static()

执行结果

  1. /usr/bin/python3.5 /home/ansheng/文档/Python_code/sublime/Week06/Day04/s2.py
  2. static
  3. static
  4. Process finished with exit code 0

面向对象类成员之类方法

  1. #!/usr/bin/env python
  2. # _*_coding:utf-8 _*_
  3. class Foo:
  4.    # 创建类方法的时候需要在方法前面加上@classmethod
  5.    @classmethod
  6.    def ClassMethod(cls): # 并且方法的括号内必须带有cls关键字,类方法的参数是当前类的类名
  7.        print("类方法")
  8. # 调用类方法
  9. Foo.ClassMethod()

执行结果:

  1. /usr/bin/python3.5 /home/ansheng/文档/Python_code/sublime/Week06/Day04/s2.py
  2. 类方法
  3. Process finished with exit code 0

面向对象类成员内容梳理

字段

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

方法

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

特性

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

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

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

时间: 2024-11-10 14:11:07

Python面向对象进阶及类成员的相关文章

2Python全栈之路系列之面向对象进阶及类成员

Python全栈之路系列之面向对象进阶及类成员 再次了解多继承 先来一段代码 #!/usr/bin/env python # _*_ coding:utf-8 _*_ class A:     def bar(self):         print("BAR")         self.f1()          class B(A):     def f1(self):         print("B")          class C:     def 

python面向对象程序设计(类成员)第二节

python 面向对象程序设计(类成员) 目录: (1)        类成员和实例成员 (2)        公有成员和私有成员 (3)        方法 (一)类成员与实例成员: 实例属性属于实例(对象),只能通过对象名访问. 类属性属于类,类名或对象名都可以访问,属于类的数据成员是在类中所有方法之外定义的. class Car:     price = 1000   #类属性     def __init__(self,c):         self.color = c car1 =

python面向对象进阶版

面向对象基础知识: 1.面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用: 2.类是一个模板,模板中包装了多个'函数'供使用(可以将多函数中公用的变量封装到对象中): 3.对象,根据模板创建的实例(即:对象),实例用于被包装在类中的函数: 4.面向对象三大特性:封装.继承和多态. 面向对象进阶篇详细介绍python类的成员.成员修饰符和类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存

python 面向对象 进阶篇

在上篇<python面向对象>中,简单介绍了python中面向对象的基本知识 在这篇博客中,详细介绍python类的成员,成员修饰符,类的特殊成员. 类的成员 类的成员分为三种:字段,方法和属性 所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的多少,在内存中只创建一份. 字段 字段包括普通字段和静态字段.静态字段,保存在类中.普通字段,保存在对象中. class FOO: country = “中国

Python面向对象进阶和socket网络编程-day08

写在前面 上课第八天,打卡: 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __init__(self,name): self.name=name p = Chinese('standby') # 实例化一个对象 print(p) # 打印这个对象 --- <__main__.Chinese object at 0x0000000000B3A978> - 示例2: >&g

python面向对象进阶(八)

上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数 面向对象三大特性:封装.继承和多态 本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象

python面向对象进阶

isinstance(obj,cls)检查是否obj是否是类 cls 的对象. isinstance(obj,cls)检查是否obj是否是类 cls 的对象. 反射 python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数(参数是对象,字符串格式的属性名) hasattr getattr setattr delattr __del__,就是析构方法,当对象在内存中被释放时,自动触发执行. 注:此方法一般无须定义,

Python面向对象编程、类

一.面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一个功能.举个例子,你要做饭,可以用电磁炉,也可以用煤气灶.不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路,两种最重要的编程范式分别是面向过程编程和面向对象编程. 提到面向对象,就不得不提到另一种编程思想,面向过程:什么是面向过程呢,面向过程的思想是把一个项目.一件事情按照一定的顺

Python面向对象 --- 新旧式类、私有方法、类属性和类方法、静态方法

一.Python面向对象中的新旧式类 1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object).在python3.x中若没有指定父类,会默认使用的是object作为基类:在python2.x中,若没指定父类,则不会以object作为基类. 2)旧式类(经典类):在定义类时,类后边括号中不用继承object类,甚至不用括号. 3)dir方法是用来查看类的内置方法. 二.私有方法和属性 1)私有属性是对象不希望公开的属性:私有方法是对象不希望公开的方法.在定义私有属性和方法时,在属