发布网友 发布时间:2022-04-24 12:37
共2个回答
懂视网 时间:2022-04-06 18:16
Python变量的本质:被赋值。
1 普通python变量(非类相关变量)很容易理解,在被赋值后即变量存在,可读可写。
2 Python类的变量(类变量和实例对象变量)以某种方式在某地方被赋值,即存在,可被读写。
2.1 Python类变量被赋值
(1)类的设计里
class里def外,通过变量名能被赋值。
def里通过类对象即类名字的点运算变量名可被赋值。
(2)程序里
通过类对象(类名字)的点运算类名字也可被赋值。
热心网友 时间:2022-04-06 15:24
9.3.5. 类和实例变量
一般来说,实例变量用于对每一个实例都是唯一的数据,类变量用于类的所有实例共享的属性和方法:
class Dog:
kind = 'canine' # class variable shared by all instances
def __init__(self, name):
self.name = name # instance variable unique to each instance
>>> d = Dog('Fido')
>>> e = Dog('Buddy')
>>> d.kind # shared by all dogs
'canine'
>>> e.kind # shared by all dogs
'canine'
>>> d.name # unique to d
'Fido'
>>> e.name # unique to e
'Buddy'
正如在 术语相关 讨论的, 可变 对象,例如列表和字典,的共享数据可能带来意外的效果。例如,下面代码中的 tricks 列表不应该用作类变量,因为所有的 Dog 实例将共享同一个列表:
class Dog:
tricks = [] # mistaken use of a class variable
def __init__(self, name):
self.name = name
def add_trick(self, trick):
self.tricks.append(trick)
>>> d = Dog('Fido')
>>> e = Dog('Buddy')
>>> d.add_trick('roll over')
>>> e.add_trick('play dead')
>>> d.tricks # unexpectedly shared by all dogs
['roll over', 'play dead']
这个类的正确设计应该使用一个实例变量:
class Dog:
def __init__(self, name):
self.name = name
self.tricks = [] # creates a new empty list for each dog
def add_trick(self, trick):
self.tricks.append(trick)
>>> d = Dog('Fido')
>>> e = Dog('Buddy')
>>> d.add_trick('roll over')
>>> e.add_trick('play dead')
>>> d.tricks
['roll over']
>>> e.tricks
['play dead']
总结后的知识点希望能帮到你