Python 如何打印这个类变量?

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

如果我试图打印类变量,它是一个列表,我会得到一个Python对象。 (这些是我在stackoverflow上找到的示例)

我认为这一行是罪魁祸首:
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
class
c1
变量甚至不存在,您正在打印它。如何使用?使用
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>]