zoukankan      html  css  js  c++  java
  • 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())

    谢谢!

  • 相关阅读:
    101. Symmetric Tree
    mfc实现对话框全屏置顶显示
    qq截图原理
    给对话框添加颜色
    mfc设置半透明对话框
    API介绍
    列表控件学习1
    VC++、MFC
    vs2010 产品密钥
    VS2008 视图资源.rc无法加载的问题及解决方法
  • 原文地址:https://www.cnblogs.com/zhzhang/p/11899657.html
Copyright © 2011-2022 走看看