python 类的预置属性

1、__dict__ 属性

    绑定一个存储此实例自身变量的字典。

2、__class__ 属性

    属性用于绑定创建些实例的类。

    可以借助于此属性来访问创建此实例的类。

3、__doc__属性

    绑定类的文档字符串

4、__slots__ 列表

     限定一个类创建的实例只能有固定的属性(实例变量)

    不允许对象添加列表以外的属性(实例变量)

    防止用户因错写属性的名称而发生程序错误

    说明:

      1. __slots__列表绑定一个字符串列表

      2. 含有__slots__列表的类所创建的实例对象没有__dict__属性,即此实例不用字典来存储对象的属性(实例变量)

In [115]: # 此示例示意 类内的__slots__列表的用法?
     ...: class Human:
     ...:     # 以下列表限制此类的对象只能有'name' 和'age' 属性
     ...:     __slots__ = ['name', 'age']
     ...:
     ...:     def __init__(self, name, age):
     ...:         self.name, self.age = name, age
     ...:
     ...:
     ...: h1 = Human("Beijing", 15)
     ...:
     ...: print(h1.age)  # 15
     ...: #h1.Age = 18  # 出错,h1对象没有Age属性,也不允许有Age属性
     ...: print(h1.age)  # 15
15
15
In [116]: # 此示例示意 类内的__slots__列表的用法?
     ...: class Human:
     ...:     # 以下列表限制此类的对象只能有'name' 和'age' 属性
     ...:     __slots__ = ['name', 'age']
     ...:
     ...:     def __init__(self, name, age):
     ...:         self.name, self.age = name, age
     ...:
     ...:
     ...: h1 = Human("Beijing", 15)
     ...:
     ...: print(h1.age)  # 15
     ...: h1.Age = 18  # 出错,h1对象没有Age属性,也不允许有Age属性
     ...: print(h1.age)  # 15
15
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-116-717d8bd37f65> in <module>
     11
     12 print(h1.age)  # 15
---> 13 h1.Age = 18  # 出错,h1对象没有Age属性,也不允许有Age属性
     14 print(h1.age)  # 15

AttributeError: 'Human' object has no attribute 'Age'
In [117]: # 此示例示意 类内的__slots__列表的用法?
     ...: class Human:
     ...:     # 以下列表限制此类的对象只能有'name' 和'age' 属性
     ...:     #__slots__ = ['name', 'age']
     ...:
     ...:     def __init__(self, name, age):
     ...:         self.name, self.age = name, age
     ...:
     ...:
     ...: h1 = Human("Beijing", 15)
     ...:
     ...: print(h1.age)  # 15
     ...: h1.Age = 18  # 出错,h1对象没有Age属性,也不允许有Age属性
     ...: print(h1.age)  # 15
15
15

 5、类的__base__属性

  __base__属性用来记录此类的基类

 

posted @ 2020-12-29 16:13  昱成  阅读(119)  评论(0编辑  收藏  举报