Python 类中的object是什么

在python中,object是一个我们会经常遇到的词汇,那么这个词汇究竟有什么含义呢?通过查阅一些文档,我们发现,object其实是一个类的实例,而这个类的名字是Object(默认类的命名首字母大写),它是所有类的父类,换句话说,python是默认所有的类都继承自Object类。而如abc(抽象基类)等其他的内置的类都是基于Object类的一些功能实现的。可以说,Object类规定了类的结构,加载方式,常用函数等。对Object类的常见应用主要有以下两个形式,python2和python3

#以前的写法:

class ClsName(Object):

    pass

#现在的写法:

class ClsName:

    pass

可见,在python3中,如果有其他父类才编写,如果没有父类可以省掉Object类,python的编译器会默认继承Object类。

Object类规定了python用于类的内置函数,以下会简述几个比较常见的用法。

__new__(cls, *args, **kwargs)

创建对象时自动调用的函数,主要作用是创建对象,给该对象分配空间,方便之后的的操作。该函数会返回创建出来的对象实体,一旦正常的返回实体后,调用初始化函数

__init__(self)

初始化函数(构造函数),作用:给当前对象创建各类变量,并给变量赋初值,一般用于对象的初始设置,该函数没有返回值。

__str__(self)

对象描述函数,作用:返回当前对象的字符串类型的信息描述,一般用于对象的直接输出显示。

__del__(self)

删除该对象时会自动调用,一般用于工具型对象的资源回收。

__repr__(self)

类似__str__,只是该函数是面向解释器的。

__call__(self)

该方法的功能类似于在类中重载 () 运算符,使得类实例对象可以像调用普通函数那样,以“对象名()”的形式使用。

以下以一个例子展示:

class Student:

    def __new__(cls, *args, **kwargs):
        print("测试类的__new__方法")
        return super().__new__(cls)

    # 调用父类的创建对象的函数,进行当前对象的创建
    def __init__(self, name, age, sex):
        print("测试类的初始化函数__init__")
        self.name = name
        self.age = age
        self.sex = sex

    # 返回当前对象的字符串描述
    def __str__(self):
        print('测试类的__str__方法')
        return "我是{},今年{}岁,是个{}的".format(
            self.name, 
            self.age, 
            self.sex
        )

    def __del__(self):
        print("测试类的__del__方法")

    def __repr__(self):
        print('测试类的__repr__方法')
        return 'self.name: {}, self.age: {}, self.sex: {}.'.format(
            self.name, 
            self.age, 
            self.sex
        )
    
    def __call__(self):
        print('测试__call__方法默认输出self.name的值')
        return self.name

用Python Shell进行测试:

stu1 = Student('张三', 20, '男')
测试类的__new__方法
测试类的初始化函数__init__
测试类的__del__方法
str(stu1)
测试类的__str__方法
'我是张三,今年20岁,是个男的'
repr(stu1)
测试类的__repr__方法
'self.name: 张三, self.age: 20, self.sex: 男.'

# 也可以用python内置的hasattr函数进行测试
hasattr(stu1,'__init__')
True
hasattr(stu1,'__repr__')
True
hasattr(stu1,'__call__')
True

a = stu1()
测试__call__方法默认输出self.name的值
a
'张三'

由此可见,在实例化一个类的时候,__new__,__init__,__del__方法会首先调用。然后通过str,repr函数分别调用__str__,__repr__方法的时候,相应的方法会得到调用。

来源:NickTheRock

物联沃分享整理
物联沃-IOTWORD物联网 » Python 类中的object是什么

发表评论