【二、元类初窥】
回顾上一篇的结论:
但就元类本身而言,它们其实是很简单的:
- 拦截类的创建
- 修改类
- 返回修改之后的类
我们这篇先来了解一下 使用 type来创建类:
"""
#元类创建类
# type("类名",(父亲,),{属性键,属性值})
"""
# 常规类
class A(object):
num = 100
C = A
a = A()
print(a.num)
print(help(A)) # 打印 类A 的结构,看下类A里面是些什么
↓
↓看一下结果↓
↓
再来看下 使用 type 创建类:
# 元类创建类
# type("类名",(父亲,),{属性键,属性值})
B = type("B", (object,), {"num": 100})
b = B()
print(b.num)
print(help(B))
输 出值为>>>
两个小例子之后,是不是发现了些什么 ?
那我们再看看 静态方法 和类方法
class AA(object):
num = 100
def test(self):
print("test")
@staticmethod
def static_method(self):
print("static")
@classmethod
def class_method(cls):
print("class ")
aa =AA()
aa.test()
print(aa.num)
print(help(AA))
再看一下 使用type 创建的
def test(self):
print("test")
@classmethod
def class_method(cls):
print("class")
@staticmethod
def static_medthod():
print("static")
BB = type("BB", (object,), {"num": 100, "test": test, "static_medthod": static_medthod, "class_method": class_method})
bb = BB()
bb.test()
print(bb)
print(help(BB))
可以看一下结果, AA 和BB 的结构还是一样的。
总结:知识点:
"""
#元类创建类
# type("类名",(父亲,),{属性键,属性值}) # 默认返回的值名称跟类创建时的名称一致
"""
预告:下一篇,我们讲改造类(你会知道,你在python中是神一样的存在,你可以修改类,甚至组织类的创建(有兴趣的可以了解一下单例模式,我们可以控制 是否创建一个对象 修改 __new__ 方法)
欢迎留言交流。
|