【python】python3 下的ORM元类窥探及实现 二

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:01   1413   0

【二、元类初窥】

回顾上一篇的结论:

但就元类本身而言,它们其实是很简单的:

  1. 拦截类的创建
  2. 修改类
  3. 返回修改之后的类

我们这篇先来了解一下 使用 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__ 方法)


欢迎留言交流。


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP