python object类型

# 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

参考:

Python - Object类_python object类-CSDN博客

猜你喜欢

转载自blog.csdn.net/qq_40107571/article/details/134649718