我在_str_
类中使用属性Book
和title
定义了方法author
:
def _str_(self):
book_line = "{title} by {author}".format(title=self.title, author=self.author)
return book_line
现在,当我创建此类的实例(比如book1
)时,为属性('title1'
,'author1'
)分配值并尝试打印我的对象,Python无法返回book_line
。
相反,我得到了令人讨厌的输出<\_main\_.Book object at 0x02BC9A30>
。另一方面,当我执行book1._str_()
时,它会返回book_line
。
我做错了什么?
答案 0 :(得分:2)
你需要两个下划线来表示&#34;魔法&#34;方法。它应该是:
def __str__(self):
#stuff
它用于表示&#34;私人&#34; (或半私人)方法。
双下划线调用名称重整。通常用于防止覆盖子类中的方法。
如果你有一些课程Foo
:
class Foo:
def __bar(self): pass
此方法为_Foo__bar
并且,魔术方法在方法名称的两个侧使用双下划线。