1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| """ 自定义元类 """
def my_meta_class(class_name, class_parents, class_attr): """ 自定义元类 将类中非"__"开头的属性改为大写 """ new_attr = {} for name, value in class_attr.items(): if not name.startswith("__"): new_attr[name.upper()] = value pass return type(class_name, class_parents, new_attr)
class A(object, metaclass=my_meta_class): a = 1
def func_A(self): pass
pass
def demo_1(): a = A() print(type(A)) print(A.__dict__) pass
class MyMetaClass(type):
def __new__(cls, class_name, class_parents, class_attr): new_attr = {} for name, value in class_attr.items(): if not name.startswith("__"): new_attr[name.upper()] = value pass return type(class_name, class_parents, new_attr)
class B(metaclass=MyMetaClass): b = 1
def func_B(self): pass
pass
def demo_2(): a = B() print(type(B)) print(B.__dict__) pass
if __name__ == "__main__": demo_1() demo_2() pass
|