python 内建属性

python

python中创建一个类,它不仅有我们自定义的属性和方法,还有与生俱来的一些属性和方法,我们叫它内建属性。

下面是类常用内建属性列表。

常用专有属性说明触发方式
__init__构造初始化函数创建实例后,赋值时使用,在__new__
__new__生成实例所需属性创建实例时
__class__实例所在的类实例.__class__

__str__实例字符串表示,可读性print(类实例),如没实现,使用repr结果
__repr__实例字符串表示,准确性类实例 回车 或者 print(repr(类实例))
__del__析构del删除实例
__dict__实例自定义属性vars(实例.__dict__)
__doc__类文档,子类不继承help(类或实例)
__getattribute__属性访问拦截器访问实例属性时
__bases__类的所有父类构成元素类名.__bases__

__init__:负责一个类实例化中的初始化操作

__new__:在创建实例化时发生作用,在__init__之前执行,主要作用是创建实例对象,典型的应用是在单利模式中.

class Singleton(object):

def __new__(cls, *args, **kw):

if not hasattr(cls, '_instance'):

org = super(Singleton, cls)

cls._instance = org.__new__(cls, *args, **kw)

return cls._instance

__class__:是示例对象的属性,该属性指向了实例化该对象的类,代表实例化该对象的抽象类,可以通过它调用类的方法和类属性。

class Test:

name = "抽象类"

def __init__(self):

self.name = '实例名字'

def test(self):

print('实例方法')

test = Test()

test.__class__.name # Out[21]: '抽象类'

test.__class__.test(1) # 实例方法

__str__:实例化对象的字符串表示(代表名字),面向用户,通过print输出实例化类的结果

class Test:

def __str__(self):

return '这是实例化类的说明书'

test = Test()

print(test) # 这是实例化类的说明书

__repr__:实例化对象的字符串表示,面向开发者的

class Test:

def __str__(self):

return '用户可见'

def __repr__(self):

return '开发者可见'

test = Test()

print(test) # 用户可见

test # Out[30]: 开发者可见 在控制台输出实例化对象时的显示信息

__del__:当一个实例化对象被删除时,该方法将调用,该方法是执行删除对象的操作。

class Test:

def __del__(self):

print('我被删除了】')

test = Test()

del test # 我被删了

__dict__:类或实例化对象的属性字典

class Test:

name = "抽象类"

def __init__(self):

self.name = '实例名字'

def test(self):

print('实例方法')

test = Test()

test.__dict__

Out[51]: {'name': '实例名字'}

Test.__dict__

Out[52]:

mappingproxy({'__dict__': <attribute '__dict__' of 'Test' objects>,

'__doc__': None,

'__init__': <function __main__.Test.__init__>,

'__module__': '__main__',

'__weakref__': <attribute '__weakref__' of 'Test' objects>,

'name': '抽象类',

'test': <function __main__.Test.test>})

 

__doc__:是对函数/方法/模块所实现功能的简单描述,但当指向具体对象时,会显示此对象.

class Test:

"""我是说明书"""

test = Test()

test.__doc__

Out[60]: '我是说明书'

__getattribute__:属性拦截器,内部拦截修改某个属性的值

class Test:

def __init__(self):

self.name = '正常名字'

def __getattribute__(self, name):

return '拦截后名字'

test = Test()

test.name

Out[63]: '拦截后名字'

__bases__:查询类的父类元素

class A:

pass

class B:

pass

class C(A, B):

pass

C.__bases__

Out[94]: (__main__.A, __main__.B)

 

内建属性一般是不建议修改,如果要修改那么尽量将整套的内建属性复写,否则容易出现错误。

以上是 python 内建属性 的全部内容, 来源链接: utcz.com/z/389251.html

回到顶部