# object类是所有类的父类
# type是所有类的类型,也就是所有类都是由type实例化而来,包括type类和父类object
# class 继承object 同时又type类实例化。其中type就是元类
print('type的父类',type.__base__)
class test:
pass
print('class的父类是:',test.__base__)
print('object父类是:',object.__base__)
print('object的类型是',type(object))
# class:是典型的面向对象编程的表现形式,为定义对象的属性、行为提供了一个模板。
# object python3中所有类的父类,在class编程,隐式自动继承object,object为其提供了一些内置函数
# type: type是所有对象的顶级类型
# class与object:python3中所有的class都继承object,并且每个class的顶级父类都是object
# 在python3中,隐式默认元类为type,所以每个class顶级类型都是type类
class MyMeta(type):
def __new__(cls, *args, **kwargs):
print("元类中的__new__被调用")
return super(MyMeta, cls).__new__(cls, *args, **kwargs)
def __init__(self, *args, **kwargs):
print("元类中的__init__被调用")
return super(MyMeta, self).__init__(*args, **kwargs)
def __call__(self, *args, **kwargs):
print("元类中的__call__被调用")
return super(MyMeta, self).__call__(*args, **kwargs)
class MyClass(metaclass=MyMeta):
def __new__(cls, *args, **kwargs):
print("主类中的__new__被调用")
return super(MyClass, cls).__new__(cls, *args, **kwargs)
def __init__(self, *args, **kwargs):
print("主类中的__init__被调用")
return super(MyClass, self).__init__(*args, **kwargs)
def __call__(self, *args, **kwargs):
print("主类中的__call__被调用")
return super(MyClass, self).__call__(*args, **kwargs)
print("-------------------------\n创建具体的对象前\n----------------------------------")
m = MyClass()
class Student:
def __new__(cls, *args, **kwargs):
print("创建对象时有自动调用的函数,如果当前函数没有返回对象,则不会再执行初始化函数了")
return super().__new__(cls) # 调用父类的创建对象的函数,进行当前对象的创建
def __init__(self, name, age, sex):
print("初始化函数,对象创建成功后自动调用,一般用于对象属性的赋值")
self.name = name
self.age = age
self.sex = sex
# 返回当前对象的字符串描述
def __str__(self):
return "我是{},今年{}岁,是个{}的".format(self.name, self.age, self.sex)
def __del__(self):
print("删除该对象时会自动调用该函数,一般用于工具类释放资源")
if __name__ == '__main__':
stu1 = Student('张三', 20, '男')
print(stu1) # 当输出对象时,输出该对象的字符串描述,自动调用__str__函数
del stu1
参考: