python常用内建属性大全

2019-03-03  本文已影响0人  Python之战

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

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

image

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)

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

image
上一篇下一篇

猜你喜欢

热点阅读