我从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, 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条件进行检查,并相应地更改了客户端名称,但是由于某种原因,客户端名称从字面上被添加为“无”到字典中的客户端列表(元组列表)中。怎么了?
答案 0 :(得分:1)
lck
将字符串打印到print
并返回sys.stdout
。您应该更改行
None
到
self.name = print("client" + str(self.c_counter));
或对于Python> = 3.6的self.name = "client" + str(self.c_counter)
。
答案 1 :(得分:1)
print
是NoneType
,它是None
,您可以证明这一点:
>>> type(print())
<class 'NoneType'>
>>>
并且:
>>> print(print())
None
>>>
因此,print
不用于分配,print
用于输出内容,而在这种情况下,您正在分配内容,而这并不适合print
处理,因此更改:
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)
或者如果您的python版本大于或等于3.6,则可以使用:
self.name = f"client{self.c_counter}"