廖雪峰python3复习总结——day7-4

多重继承:通过多重继承,一个子类就可以同时获得多个父类的所有功能

Mixln:目的就是给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合多个MixIn的功能,而不是设计多层次的复杂的继承关系

对于多态继承中属性方法矛盾的问题参照博客:https://kevinguo.me/2018/01/19/python-topological-sorting/,文中的最左原则,我认为是从代码的先后顺序来讲。

 

定制类:Python的class中还有许多这样有特殊用途的函数,可以帮助我们定制类。

__str__调用类时,print()返回特定的字符串,直接调用时,返回的是开发者看到的字符串。即__repr__

__iter__返回一个迭代对象,和__next__方法一起,调用next()

__getitem__取值和切片,isinstance(n, slice)

__getattr__当调用不存在的属性时,比如score,Python解释器会试图调用__getattr__(self, attr)来尝试获得属性

__call__()方法,就可以直接对实例进行调用。

 

使用枚举类:

Enum可以把一组相关常量定义在一个class中,且class不可变,而且成员可以直接比较。

表达式为:

from enum import Enum

Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))

 默认给Month.Jan赋值为1

若要精准控制则:可以调用@unique

 

使用元类:

使用type()既可以返回数据类型,也可以创建类。

>>> def fn(self, name='world'): # 先定义函数
...     print('Hello, %s.' % name)
...

>>> Hello = type('Hello', (object,), dict(hello=fn)) # 创建Hello class

第一个参数为class名称;
第二个参数为继承的父类;
第三个参数为绑定的函数

 使用metaclass:先定义metaclass,就可以创建类,最后创建实例.类可以看做是元类的实例。

# metaclass是类的模板,所以必须从`type`类型派生:
class ListMetaclass(type):
    def __new__(cls, name, bases, attrs):
        attrs['add'] = lambda self, value: self.append(value)
        return type.__new__(cls, name, bases, attrs)

class MyList(list, metaclass=ListMetaclass):
    pass
L = MyList()
L.add(1)
print(L)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值