元类
在Python中一切皆对象,数字、字符串、函数等都是对象,那么利用class关键字创建的类也是一个对象叫做类对象,那么他们都是什么创建的呢?
他们都是由元类创建的,而元类是由自身创建
Python是一种动态类型语言,可以动态的创建变量,那么同样可以动态的创建类,我们可以按照我们的需求通过type
去创建所需要的类
总所周知,type
函数可以判断对象类型,但是type
还有另外一个用法,就是可以创建类
type会根据传入的参数不同,执行不同的事情
注意:尽量不要让一个函数拥有2种完全不同的功能,Python之所以这样设计是为了保持向后兼容性
扩充:
向后兼容性:
简单来说,就是当前的版本可以使用之前版本的东西,不会造成不兼容而无法使用
type
的两种语法:
1.type(对象) # 可以判断对象的数据类型
2.type(类名(字符串),(继承的父类的类名(引用)),{ 名称(字符串):值(引用) })
例:
class A:
pass
B = type("B", (), {})
# 以上两种创建类的方式不同,但是创建的类中的属性,方法等都相同
创建带有类属性的类
class A:
a = 1
B = type("B", (), {"a": 1})
创建带有方法的类
# 普通创建类
class A:
a = 1
def a1(self):
pass
@classmethod
def a2(cls):
pass
@staticmethod
def a3():
pass
# 元类创建类
def a1(self):
pass
def a2(cls):
pass
def a3():
pass
B = type("B", (), {"a": 1, "a1": a1, "a2": a2, "a3": a3})
可以通过 对象.__class__
来查看创建该对象的类
元类一般情况下不会使用,但是在MySQL数据库中会使用元类来实现ORM映射