#类
###类变量
类变量是类的属性,此属性属于类,不属于此类的实例
类变量的作用:通常用来存储该类创建对象的共有属性
说明:
- 类变量可以通过该类直接访问
- 类变量可以通过类的实例直接访问
- 类变量可以通过此类的对象的__class__属性间接访问
举个栗子:
>>> class Human:
total_count = 0
>>> Human.total_count += 1 # 通过该类直接访问类变量
>>> print(Human.total_count)
1
>>> peo1 = Human() # 创建一个实例对象
>>> peo1.total_count += 1 # 通过该实例来访问类的变量
>>> print(peo1.total_count)
2
>>>
>>> peo1.__class__.total_count += 100
>>> print(peo1.__class__.total_count)
101
>>>
借助__class__实现一个小栗子:
class Human:
total_count = 0 # 类变量,用来记录Human对象的个数
def __init__(self, n): # 初始化方法
self.name = n
self.__class__.total_count += 1
print(n, '对象被创建')
def __del__(self):
print(self.name, '对象被销毁')
self.__class__.total_count -= 1
L = []
L.append(Human('张飞'))
L.append(Human('关羽'))
print('当前人物个数是:', Human.total_count)
del L[1]
print('当前人物个数是:', Human.total_count)
运行结果:
张飞 对象被创建
关羽 对象被创建
当前人物个数是: 2
关羽 对象被销毁
当前人物个数是: 1
张飞 对象被销毁
####类的文档字符串
- 类内第一个没有赋值给任何变量的字符串为类的文档字符串
- 类的文档字符串可以通过help()查看
- 类的文档字符串绑定在该类的__doc__属性上
举个栗子:
>>> class A:
'''hahahahehehe'''
pass
>>> help(A)
Help on class A in module __main__:
class A(builtins.object)
| hahahahehehe
|
| Data descriptors defined here:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)
>>> print(A.__doc__)
hahahahehehe
####类的__slots__列表
作用:
- 限定一个类创建的实例只能有固定的属性(实例变量)
- 不允许对象添加列表以外的实例属性(实例变量)
- 防止用户因错写属性名而发生程序错误
说明:
__slots__属性绑定一个字符串类列表
含有__slots__属性的类所创建的实例对象没有__doc__属性,即此实例不用字典来存储数据
举个栗子:
class Human:
__slots__ = ['name', 'age'] #限定只有列表内的实例变量,防止用户误写,如下边的Age
def __init__(self, n, a):
self.name = n
self.age = a
def info(self):
print(self.name, '今年', self.age, '岁')
h1 = Human('小张', 8)
h1.info() # 小张今年8岁
h1.Age = 9 # Age 没有此变量 错误信息:'Human' object has no attribute 'Age'
h1.info() # 小张今年8岁
打印结果是:
小张 今年 8 岁
Traceback (most recent call last):
File "C:/Users/.../slots.py", line 17, in <module>
h1.Age = 9 # Age 没有此变量 错误信息:'Human' object has no attribute 'Age'
AttributeError: 'Human' object has no attribute 'Age'
从打印结果看,是没有Age这个变量的,那么如果不加__slots__是什么样的呢?
把__slots__ = [‘name’, ‘age’]注释后
打印结果:
小张 今年 8 岁
小张 今年 8 岁
虽然没报错,但是还是没有Age这个变量,所以,打印的结果和它没有关系
本节暂时到这
本文详细解析了Python中类变量的概念与使用方法,包括类变量的访问途径、类的文档字符串及__slots__列表的限制作用。通过具体实例展示了类变量如何被类和其实例访问,以及__slots__如何限定实例属性。

被折叠的 条评论
为什么被折叠?



