无法更改类的实例属性?

时间:2019-08-17 06:32:44

标签: 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, 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条件进行检查,并相应地更改了客户端名称,但是由于某种原因,客户端名称从字面上被添加为“无”到字典中的客户端列表(元组列表)中。怎么了?

2 个答案:

答案 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)

printNoneType,它是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}"