Python面向对象-内置类属性

概述

python类中有一些内置类属性,新建类后,python会自动创建这些类属性

查看类属性

通过 dir() 函数查看类属性,如下代码:

class Phone:
    pass

iphone=Phone()
iphone.name='iphoneX'
iphone.cpu='A11'

print(dir(Phone))

__dict__

类或实例的属性(返回dict数据,由类或实例的属性组成)

#接上面的代码

#查看类属性
print(Phone.__dict__)
#查看实例属性
print(iphone.__dict__)

结果

{'__module__': '__main__', '__init__': <function Phone.__init__ at 0x03121B28>,
'__dict__': <attribute '__dict__' of 'Phone' objects>, '__weakref__': <attribute
 '__weakref__' of 'Phone' objects>, '__doc__': None}

{'name': 'iphoneX', 'cpu': 'A11'}

注意

对实例设置属性,其实就是在对实例的__dict__属性设置key-value值

iphone.__dict__['name']='iphoneXS'
print(iphone.name)

结果如下:

iphoneXS

__slots__

  1. 降低内存使用
  2. 不能对实例新增属性
  3. 实例没有(或者不允许访问)__dict__属性
class Phone:
    __slots__=['cpu']

iphone=Phone()
iphone.cpu='A11'
print(iphone.cpu)

#执行报错
iphone.name='iphone11'
print(iphone.name)

#执行报错
print(iphone.__dict__)

__doc__

类的文档字符串

class Phone:
    '''手机类'''
    def __init__(self,name=""):
        """
        name:名称
        """
        print("调用__init__()",",name=",name)
        self.name=name

print(Phone.__doc__)
print(Phone.__init__.__doc__)

结果如下:

手机类

__name__

类有此属性,即:类名
实例没有此属性

print(Phone.__name__)

结果如下:

Phone
name:名称

原文出处:/show_1EF2CdO4Y648.html