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())

    谢谢!

  • 相关阅读:
    二分查找 找到了返回位置 没找到返回应该插入的位置
    前端知识结构
    RequireJS
    Java内部类——成员内部类
    Java笔记
    Java单例模式
    Java与C#的语法区别(不断更新中...)
    进制转换
    查找算法——折半查找
    排序算法——冒泡排序
  • 原文地址:https://www.cnblogs.com/zhzhang/p/11899657.html
Copyright © 2011-2022 走看看