首页 > 编程语言 > 详细

Python元类

时间:2020-03-25 23:51:13      阅读:76      评论:0      收藏:0      [点我收藏+]

本节介绍一下Python中元类的基本内容

type :python3中所有的类都是通过type创建出来的

object :所有类的顶级父类

想说的话在注释中都添加了,想学习的可以看一下

# 元类 python中内置的元类: type
# 元组如果只有一个参数需要在参数后面增加一个逗号,不然是错误的。空元组()
# type创建类需要三个参数,第一个类名字符串类型 第二个要继承的类是一个元组,
# 第三个是属性及方法是一个字典 键值对的形式表示属性或者对应的方法
T = type(小明, (object,), {attr: 100, __attr2: 200})  # 会返回一个类
#          类名     要继承的类       类的属性和方法
print(T)


class T1(object):
    attr = 100
    __attr2 = 200


print(T1)
# 定义的类是相同的

print(T.__dict__)  # 查看类所拥有的属性


def func(self):
    print(-----------这个是self)


T3 = type(小明2, (object,), {function: func})  # 传入方法创建类
print(T3)
T3().function()


# 自定义元类 必须继承type
# type 创建类需要三个参数
class MyClass(type):
    # 重写new 方法
    def __new__(cls, name, bases, attr_dict, *args, **kwargs):
        print(最基础的自定义元类)
        # return type.__new__(name, bases, attr_dict)
        return super().__new__(cls, name, bases, attr_dict)


# metaclass 用来指定元类 如果不传默认是type 使用自定义的元类创建的类
class One(metaclass=MyClass):
    name = 小明


print(type(One))
print(One.name)


# 从继承的父类里面找有没有指定元类,如果找到了子类就用父类指定的元类来创建类
class Two(One):
    pass


print(type(Two))


# 定义一个类,通过元类来让该类的类属性变成大写
class MyClassTow(type):
    def __new__(cls, name, bases, attr_dict, *args, **kwargs):
        # 遍历属性名称,遍历字典的键值对用items
        for k, v in attr_dict.items():
            attr_dict.pop(k)
            # 删除key
            attr_dict[k.upper()] = v
            # 将key转为大写
        # attr_dict[‘__slots__‘] = [‘name‘, ‘age‘, ‘gender‘]
        # 限制通过这个元类创建的类的实例对象的属性
        return super().__new__(cls, name, bases, attr_dict)


class Three(metaclass=MyClassTow):
    name = 小明
    age = 18
    gender = 


print(Three.__dict__)

 

Python元类

原文:https://www.cnblogs.com/congyiwei/p/12571347.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!