Python 3.x Can';不能更改我的类的实例属性吗?

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

我刚开始使用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条件检查这一点,并相应地更改客户机名称,但由于某种原因,客户机名称会被添加为字典中的客户机列表(元组列表)中的“无”。这里怎么了?

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}"