【发布时间】:2018-06-01 21:47:18
【问题描述】:
假设我有以下 Python 代码:
import sys
class DogStr:
tricks = ''
def add_trick(self, trick):
self.tricks = trick
class DogList:
tricks = []
def add_trick(self, trick):
self.tricks.append(trick)
# Dealing with DogStr
d = DogStr()
e = DogStr()
d.add_trick('trick d')
e.add_trick('trick e')
print(d.tricks)
print(e.tricks)
# Dealing with DogList
d = DogList()
e = DogList()
d.add_trick('trick d')
e.add_trick('trick e')
print(d.tricks)
print(e.tricks)
使用 Python 3.6.5 运行此代码,我得到以下输出:
trick d
trick e
['trick d', 'trick e']
['trick d', 'trick e']
DogStr 和 DogList 的区别在于,我将 tricks 视为前者的字符串,而将后者视为列表。
在处理 DogStr 时,tricks 表现为一个实例变量。但是使用 DogList 技巧的行为就像一个类变量。
我希望在两个调用中看到相同的行为,即:如果输出的最后两行相同,那么前两行应该是相同的。
所以我想知道。对此有何解释?
【问题讨论】:
-
他们的行为并没有不同。如果您对列表执行
self.tricks = trick,您将看到与字符串完全相同的行为。不同之处在于您正在做一些不同的事情——您正在改变列表值,而您并没有对字符串值做这件事(事实上,不能这样做,因为字符串是不可变的)。 -
我对 Python 缺乏经验。所以我不知道这是一个常见的问题。我找不到等效的问题,但感谢您指出相关问题。
-
规则是您应该在发布之前搜索 dup……但是自动 dup 查找器没有用,而且,正如您所看到的,我很难为此找到 dup一个尽管很了解这里的 python 标签并且在过去找到了它,所以……我很难怪你找不到它。
标签: python python-3.x programming-languages