Python 如何打印这个类变量?
如果我试图打印类变量,它是一个列表,我会得到一个Python对象。 (这些是我在stackoverflow上找到的示例) 我认为这一行是罪魁祸首:Python 如何打印这个类变量?,python,class,Python,Class,如果我试图打印类变量,它是一个列表,我会得到一个Python对象。 (这些是我在stackoverflow上找到的示例) 我认为这一行是罪魁祸首:Contact.all\u contacts.append(self)在第一个示例代码中。但我不确定这里到底发生了什么 编辑: 有几个用户告诉我只添加self.name,而不是只添加self 所以当我这样做的时候: class Contacts: all_contacts = [] def __init__(self, name, ema
Contact.all\u contacts.append(self)
在第一个示例代码中。但我不确定这里到底发生了什么
编辑:
有几个用户告诉我只添加self.name
,而不是只添加self
所以当我这样做的时候:
class Contacts:
all_contacts = []
def __init__(self, name, email):
self.name = name
self.email = email
Contacts.all_contacts.append(self.name)
Contacts.all_contacts.append(self.email)
def __str__(self):
return '%s, <%s>' % (self.name, self.email)
def __repr__(self):
return str(self)
c1 = Contacts("Paul", "something@hotmail.com")
c2 = Contacts("Darren", "another_thing@hotmail.com")
c3 = Contacts("Jennie", "different@hotmail.com")
print(Contacts.all_contacts)
而不是:
[Paul, <something@hotmail.com>, Darren, <another_thing@hotmail.com>, Jennie, <different@hotmail.com>]
[Paul,Darren,Jennie,]
因此,
\uuu str\uu
方法中的格式在这里不起作用。您的代码在显示以下内容时会构造一个对象列表:
Contacts.all_contacts.append(self)
因为self是一个对象,并且会附加到所有联系人列表中
如果您想要不同的内容,请在所有联系人列表中添加不同的内容。当您打印列表时,它会为列表调用
\uuuuu str\uuuu
,但列表内部会为其元素调用\uu repr\uuu()
。您还应该为您的类实现\uu repr\uu()
。范例-
class Contacts:
all_contacts = []
def __init__(self, name, email):
self.name = name
self.email = email
Contacts.all_contacts.append(self)
def __str__(self):
return '%s, <%s>' % (self.name, self.email)
def __repr__(self):
return str(self)
class联系人:
所有联系人=[]
定义初始化(自我、姓名、电子邮件):
self.name=名称
self.email=电子邮件
Contacts.all_Contacts.append(self)
定义(自我):
返回“%s”,%(self.name,self.email)
定义报告(自我):
返回str(self)
演示-
class Contacts:
all_contacts = []
def __init__(self, name, email):
self.name = name
self.email = email
Contacts.all_contacts.append(self)
def __str__(self):
return '%s, <%s>' % (self.name, self.email)
def __repr__(self):
return str(self)
contact1 = Contacts("Grace1", "something1@hotmail.com")
contact2 = Contacts("Grace2", "something2@hotmail.com")
contact3 = Contacts("Grace3", "something3@hotmail.com")
print(Contacts.all_contacts)
class联系人:
所有联系人=[]
定义初始化(自我、姓名、电子邮件):
self.name=名称
self.email=电子邮件
Contacts.all_Contacts.append(self)
定义(自我):
返回“%s”,%(self.name,self.email)
定义报告(自我):
返回str(self)
contact1=联系人(“Grace1”something1@hotmail.com")
contact2=联系人(“Grace2”something2@hotmail.com")
contact3=联系人(“Grace3”something3@hotmail.com")
打印(联系人。所有联系人)
结果-
[Grace1, <something1@hotmail.com>, Grace2, <something2@hotmail.com>, Grace3, <something3@hotmail.com>]
[Grace1、Grace2、Grace3]
此外,从清单上看,该列表实际上具有<代码> 6 > /Case>元素,因此您应该考虑更改<代码>“yr RePrpg< < /Calp>”返回。 Python将只调用list对象(AlelAsCad)的<强> STR < /强>,而不针对列表中的每个项目。
对于内置类型,python可以打印值。为什么不这样做:
联系人。所有联系人。append(self.name)
这只会将名称附加到列表中。如果您可以粘贴实际代码,会有什么害处。我可以看到您的类名为Contacts
,您正在实例化Contact
classc1
变量甚至不存在,您正在打印它。如何使用?使用Contacts.all_Contacts.append(self)
将contact1
传递到您的列表中。如果要附加联系人姓名,必须传递self.name
,或任何您想要的属性。通过传入Contact 1
,您正在传入对您创建的Contact
实例的引用。@Harsh Vardhan Ladha,我看到了问题所在。我在那里输入了一个错误。仅供参考,\uuuuu str\uuuuuuuuu
如果没有提供实现,则默认为\uuuu repr\uuuuuuu
。因此,您只需要定义\uuuuu repr\uuuuu
。我想有些解决方案告诉我传递self.name
的问题是\uuuu str\uuuu
方法中的格式设置被忽略了。这有什么原因吗?真正的问题不是:你需要在所有联系人列表中提供什么信息吗?你能澄清一下你的意思吗?就像我在打印列表时所说的那样,在列表中调用str()
,但是list
在其元素上内部调用repr()
,当您不提供\uuuuuuurepr\uuuu()
时,对于列表的元素,它使用对象中的\uuuurepr\uuu()
类,这就是您在输出中看到的。这是否回答了您的问题?当您添加self.name
变量到列表中时,而不是对象本身,您只需添加字符串self.name
和self.email
,而不是对象,因此是的,对象的\uuu str\uuuuuuuuuuu
将不会被锁定。
class Contacts:
all_contacts = []
def __init__(self, name, email):
self.name = name
self.email = email
Contacts.all_contacts.append(self)
def __str__(self):
return '%s, <%s>' % (self.name, self.email)
def __repr__(self):
return str(self)
class Contacts:
all_contacts = []
def __init__(self, name, email):
self.name = name
self.email = email
Contacts.all_contacts.append(self)
def __str__(self):
return '%s, <%s>' % (self.name, self.email)
def __repr__(self):
return str(self)
contact1 = Contacts("Grace1", "something1@hotmail.com")
contact2 = Contacts("Grace2", "something2@hotmail.com")
contact3 = Contacts("Grace3", "something3@hotmail.com")
print(Contacts.all_contacts)
[Grace1, <something1@hotmail.com>, Grace2, <something2@hotmail.com>, Grace3, <something3@hotmail.com>]