Python 3.x Can';不能更改我的类的实例属性吗?
我刚开始使用python,我不太明白为什么我不能更改存储在我的一个实例属性中的数据。我有以下代码:Python 3.x Can';不能更改我的类的实例属性吗?,python-3.x,Python 3.x,我刚开始使用python,我不太明白为什么我不能更改存储在我的一个实例属性中的数据。我有以下代码: class Bank: def __init__(self, bank = 'Unnamed'): self.bank = bank self.clients = [] self.status = {'bank': self.bank, 'clients': self.clients} self.c_counter=0 def deposit(self, nam
class Bank:
def __init__(self, bank = 'Unnamed'):
self.bank = bank
self.clients = []
self.status = {'bank': self.bank, 'clients': self.clients}
self.c_counter=0
def deposit(self, name = None, amount = 200):
self.name = name
self.amount = amount
self.c_counter += 1
if self.name is None:
self.name = print("client" + str(self.c_counter));
self.clients.append((self.name, self.amount))
else:
self.clients.append((self.name, self.amount))
这将产生以下输出:
bb = Bank("bb")
bb.deposit(amount = 2000)
bb.status
out: {'bank': bb, 'clients': [(None, 2000)]}
而所需的输出是:
out: {'bank': bb, 'clients': [('client1', 2000)]}
如您所见,如果在存款过程中未指定客户名称,我尝试将客户名称设置为“clientx”;x只是一个数字,用于区分每个通用客户机与没有特定名称的其他通用客户机
如果在调用银行的存款属性时未提供特定名称,则默认情况下,客户名称设置为
None
。我用if条件检查这一点,并相应地更改客户机名称,但由于某种原因,客户机名称会被添加为字典中的客户机列表(元组列表)中的“无”。这里怎么了?print
将字符串打印到sys.stdout
并返回None
。你应该换线
self.name = print("client" + str(self.c_counter));
到
或者可能
self.name=f“client{self.c_counter}”
for python>=3.6.print
是一个非类型
,它是无
,您可以证明:
>>> type(print())
<class 'NoneType'>
>>>
因此,print
不用于分配,print
用于输出内容,而在本例中,您分配的内容并不意味着要处理print
,因此更改:
self.name = print("client" + str(self.c_counter));
致:
或:
或:
或者,如果您的python版本大于或等于3.6,则可以使用:
self.name = f"client{self.c_counter}"
self.name = print("client" + str(self.c_counter));
self.name = "client" + str(self.c_counter)
self.name = "client%s" % self.c_counter
self.name = "client{}".format(self.c_counter)
self.name = f"client{self.c_counter}"