如何在Python中打印我的对象名称

时间:2014-10-14 16:26:14

标签: python class python-3.x

所以我对此代码有疑问:

class Cliente:
    def __init__(self,nome,telefone):
        self.nome = nome;
        self.telefone = telefone;

class Conta:
    def __init__(self,clientes,numero,saldo=0):
        self.saldo = saldo
        self.numero = numero
        self.clientes = clientes
    def resumo(self):
        print('Cliente: {0:s} CC Numero: {1:s} Saldo: {2:10.2f}'.format(self.clientes.nome, self.numero, self.saldo))
    def saque(self,valor):
        if self.saldo >= valor:
            self.saldo -= valor
    def deposito(self,valor):
        self.saldo += valor

当我去测试我的班级时:

from tatu import Cliente
from tatu import Conta

joao = Cliente('Joao da Silva','666-6666')
maria = Cliente('Maria da Penha','234-5678')
conta1 = Conta(joao,'0138',1500)
conta1.deposito(800)
conta1.saque(1300)
conta2 = Conta([joao,maria],'0139',1000)
conta2.deposito(1000)
conta1.resumo()
conta2.resumo()

我的第二个帐户不打印,我有这个错误:

print('Cliente: {0:s} CC Numero: {1:s} Saldo: {2:10.2f}'.format(self.clientes.nome, self.numero, self.saldo))
AttributeError: 'list' object has no attribute 'nome'

2 个答案:

答案 0 :(得分:2)

你是混合类型;有时您的clientes一个 Cliente个实例,有时它是一个列表。

始终将其设为列表,然后在该列表上循环

# account with just one client
conta1 = Conta([joao],'0138',1500)
# account with two clients
conta2 = Conta([joao,maria],'0139',1000)

现在它始终是一个列表,请使用循环:

def resumo(self):
    for client in self.clientes:
        print('Cliente: {0:s} CC Numero: {1:s} Saldo: {2:10.2f}'.format(client.nome, self.numero, self.saldo))

或者可能分开客户名称列表并单独打印帐号和saldo:

def resumo(self):
    for client in self.clientes:
        print('Cliente: {0:s}'.format(client.nome))
    print('CC Numero: {1:s} Saldo: {2:10.2f}'.format(self.numero, self.saldo))

答案 1 :(得分:0)

self.clientes不是Cliente的实例,它是一个实例列表。列表本身没有nome属性,只有实例。你需要迭代。