Python之元类

Posted zhzhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之元类相关的知识,希望对你有一定的参考价值。

 

如果希望创建某一批类全部具有某种特征,则可通过metaclass来实现。使用metaclass可以在创建类时动态修改类定义。

为了使用metaclass动态修改类定义,程序需要先定义metaclass,metaclass应该继承type类,并重写new方法。

 

class ItemMetaClass(type):
    # cls 代表被动态修改的类
    # name 代表被动态修改的类名
    # bases 代表被动态修改的类的所有父类
    # attr 代表被动态修改的类的所有属性、方法组成的字典
    def __new__(cls, name, bases, attrs):
        attrs[cal_price] = lambda self: self.price * self.discount
        return type.__new__(cls, name, bases, attrs)


class Book(metaclass=ItemMetaClass):
    __slots__ = [name, price, _discount]
    def __init__(self, name, price):
        self.name = name 
        self.price = price
    @property
    def discount(self):
        return self._discount
    @discount.setter
    def discount(self, discount):
        self._discount = discount

class CellPhone(metaclass=ItemMetaClass):
    __slots__ = [price, _discount]
    def __init__(self, price):
        self.price = price
    @property
    def discount(self):
        return self._discount
    @discount.setter
    def discount(self, discount):
        self._discount = discount

b = Book(‘九年级数学上, 89)
b.discount = 0.76
print(b.cal_price())
cp = CellPhone(2399)
cp.discount = 0.85
print(cp.cal_price())

 

谢谢!

以上是关于Python之元类的主要内容,如果未能解决你的问题,请参考以下文章

Python之元类

Python进阶开发之元类编程

Python之元类详细解析

python之元编程(元类实例)

Python之Metaclass详解,Python之元类

面向对象之元类