11_6 Python高级2

多继承以及MRO顺序

  • 多继承的注意事项:
    • 多继承在类中定义多个同名的方法,会自动覆盖之前定义的方法
  • 查看MRO顺序的方法:
    • 类名.__mro__(返回一个元组格式的MRO顺序)
    • 类名.mro()(返回一个列表格式的MRO顺序)
  • 多继承中调用父类的几种方法
    • 类名.方法(指定调用哪个类的方法)
    • super(类名,self).方法
      1. 类名和self可以不指定
      2. 默认以当前的类传入
      3. 这个方式可以按照MRO顺序调用上一级的指定的方法

*args和**args作用

  • *args的作用
    • 将传递的实参多余的参数以元组的方式传递到函数或者方法中
  • **args的作用
    • 将传递多余的指定参数以字典的方式传递到函数或者方法中

面向对象高级

  • 类对象
    • 创建一个类的时候就会创建一个类对象,类名就是类对象
    • 类属性在内存中只保存一份数据
    • 实例属性每一个对象都对单独保存一份

property属性

  • 概念:
    • 定义一个方法但是使用装饰器property,只可以有一个self形参
    • 可以用这样的属性动态的获取属性的值
  • 定义方式(经典类)
 class Fun():
    @property
    def size(self):
        return 100

fun = Fun()
print(fun.size)

100

  • 定义方式(新式类)
class Fun():
    def __init__(self):
        self.num = 0
        
    @property
    def price(self):
        print("get @property")
        return self.num
        
    @price.setter
    def price(self, value):
        self.num = value
        print("set @price.setter")
    
    @price.deleter
    def price(self):
        print("del @price.deleter")
        
obj = Fun()
print(obj.price)    # 可以获取价格,调用property装饰器
obj.price = 100     # 修改价格,调用price.setter装饰器
del obj.price       # 删除价格,调用price.deleter装饰器

get @property
0
set @price.setter
del @price.deleter`
  • 使用property方法来创建property属性

可以使用proerty来替代原有的封装的set和get方法

#coding=utf-8
class Foo(object):
    def get_bar(self):
        print("getter...")
        return "laowang"

    def set_bar(self, value): 
        """必须两个参数"""
        print("setter...")
        return 'set value' + value

    def del_bar(self):
        print("deleter...")
        return "laowang"

    BAR = property(get_bar, set_bar, del_bar, "description...")

obj = Foo()

obj.BAR  # 自动调用第一个参数中定义的方法:get_bar
obj.BAR = "alex"  # 自动调用第二个参数中定义的方法:set_bar方法,并将“alex”当作参数传入
desc = Foo.BAR.__doc__  # 自动获取第四个参数中设置的值:description...
print(desc)
del obj.BAR  # 自动调用第三个参数中定义的方法:del_bar方法

元类type

- 元类创建类对象,类对象创建实例对象
- 元类是所有类的祖宗类

猜你喜欢

转载自www.cnblogs.com/fandx/p/116-Python-gao-ji2.html