python3自学笔记10-面向对象进阶-多重继承、枚举类、元类

本文详细介绍了Python3中的面向对象高级特性,包括多重继承、枚举类和元类的使用。在多重继承中,通过MixIn模式来组合多个功能。枚举类利用Enum实现常量的定义,可以自定义枚举类型并进行访问。最后,探讨了元类的概念,展示了如何通过type()函数动态创建类以及如何使用metaclass定制类的创建行为,结合实例解释了元类在ORM框架中的应用。
摘要由CSDN通过智能技术生成

一、多重继承

Python允许使用多重继承,MixIn就是一种常见的设计。
在设计类的继承关系时,通常,主线都是单一继承下来的,如果需要“混入”额外的功能,通过多重继承就可以实现,这种设计通常称之为MixIn。
MixIn的目的就是给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合多个MixIn的功能,而不是设计多层次的复杂的继承关系。

#动物
class Animal(object):
    pass
# 哺乳类
class Mammal(Animal):
    def isMammal(self):
        print('is Mammal')
#鸟类
class Bird(Animal):
    def isBird(self):
        print('is Bird')
# 会跑
class Runnable(object):
    def run(self):
        print('can run')
# 会飞
class Flyable(object):
    def fly(self):
        print('can fly')
# 狗狗
class Dog(Mammal, Runnable):
    def info(self):
        print('dog')
# 蝙蝠
class Bat(Mammal, Flyable):
    def info(self):
        print('bat')
#鹦鹉
class Parrot(Bird, Flyable):
    def info(self):
        print('parrot')
#鸵鸟
class Ostrich(Bird, Runnable):
    def info(self):
        print('ostrich')

if __name__=='__main__':
    dog = Dog()
    dog.info()
    dog.isMammal()
    dog.run()
    print('/')
    bat = Bat()
    bat.info()
    bat.isMammal()
    bat.fly()
    print('/')
    parrot = Parrot()
    parrot.info()
    parrot.isBird()
    parrot.fly()
    print('/')
    ostrich = Ostrich()
    ostrich.info()
    ostrich.isBird()
    ostrich.run()

运行结果:

dog
is Mammal
can run
/
bat
is Mammal
can fly
/
parrot
is Bird
can fly
/
ostrich
is Bird
can run

二、枚举类

Python提供了Enum类来实现这个功能:

from enum import Enum

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

这样我们就获得了Month类型的枚举类,可以直接使用Month.Jan来引用一个常量,或者枚举它的所有成员:

for name, member in Month.__members__.items():
    print(name, '=>', member, ',', member.value)

value属性则是自动赋给成员的int常量,默认从1开始计数。

如果需要更精确地控制枚举类型,可以从Enum派生出自定义类:

from enum import Enum, unique

@unique
class Weekday(Enum):
    Sun = 0 # Sun的value被设定为0
    Mon = 1
    Tue = 2
    Wed = 3
    Thu = 4
    Fri = 5
    Sat = 6

@unique装饰器可以帮助我们检查保证没有重复值。

访问这些枚举类型可以有若干种方法:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值