1.如何在python中动态地创建类
方法一 :通过传入的参数进行判断生成类
代码实例
def my_class(a):
if a == 'a':
class A(object):
def __str__(self):
return 'a'
return A
elif a == 'b':
class B(object):
def __str__(self):
return 'b'
return B
m = my_class('a')
print(m())
运行结果
a
但该方法麻烦不灵活,因此可以使用type()来创建类
方法二: 使用type来动态创建类
type是用来创建类的类。需要给type传入三个参数,第一个参数是类名称, 第二个是类继承的基类并且需要传入元祖,第三个是类属性
代码示例
# 创建类使用的函数,必须有一个self参数
def say(self):
return 'say'
my_class = type('User', (object,), {'name': '小红', 'say': say})
print(my_class().name)
print(my_class().say())
运行结果
小红
say
2.什么是元类
元类就是用来创建类的类, type就是一个元类。
python类的实例化过程: 先在自己的类中寻找metaclass参数,如果不存在就在基类中寻找metaclass,如果基类中也不存在就在模块中寻找,如果找不到metaclass参数就调用type来创建类
元类最常用的使用方法就是当一个类继承另一个类时,假如需要重写某些方法,如果不重写就应该报错。这时候可以使用元类在调用new魔法方法的时候进行检查,如果没有重写某些方法就抛出异常。
代码示例
class Metaclass(type):
def __new__(cls, *args, **kwargs):
# 元类必须继承type,并且调用基类方法时必须传入所有参数
return super().__new__(cls, *args, **kwargs)
class User(metaclass=Metaclass):
def __init__(self, name):
self.name = name
def __str__(self):
return 'user'
if __name__ == '__main__':
u = User(name='123')
print(u)










网友评论