我再次向另一个非常初级的问题道歉。出于这样或那样的原因,我似乎还无法从Java过渡到Python。我意识到Python有这些内置的方法可以帮助用户做事。但我想知道下面两段代码是否相同,或者是否一个“更正式”,因为它在Java中比其他代码更常用。
def print()
print "My name is___"
和
def _str_()
print "My name is___"
再一次,我的任何一种方法都可能完全错误(我的猜测是“ str ”方法。为了节省时间,我还没有写出类名和其他方法/ attributes。提前谢谢。
答案 0 :(得分:4)
您不应该定义print
,因为它是关键字/内置函数。
__str__
函数用于类中。当对象的实例转换为字符串时,将调用此函数。 print
等函数在内部执行此操作。您也可以致电str(my_object_instance)
。
请注意双下划线。单一的,就像在OP中一样,不是什么特别的。
示例(Python交互式):
>>> class A:
... def __str__(self):
... return "I am an instance of A"
...
>>> a_inst = A()
>>> print a_inst
I am an instance of A
>>>
如果您有任何疑问,请发表评论。
答案 1 :(得分:2)
__str__
,__len__
,__contains__
等协议。
任何__xxx___
都有特殊含义,一位经验丰富的pythonneer希望xxx(obj1)
来电话obj1.__xxx__()
。
但有时,协议与关键字一起使用:
'a' in 'aaaaa'
被翻译为'aaaa'.__contains__('a')
。
print obj1
被翻译为print obj1.__str__()
。
即使它具有特殊(横向)含义,实现就像任何其他方法一样,因此它可以被后代类覆盖。
答案 2 :(得分:0)
这些方法背后的目标是合法的(sintax不是太多),但选择哪一个取决于你想要做什么。
也许一个简单的例子可以帮助澄清一些事情。
让我们定义一个User
类:
class User:
def __init__(self, name):
self.name = name
def __str__(self):
return "My name is %s" % self.name
def show(self):
print "My name is %s" % self.name
注意:我将方法名称从print
更改为show
,因为在python 2.x中print
是关键字,因此您无法使用它
现在让我们试试User
课程,看看__str__
和show
之间的区别?:
>>> rik = User('Ricky')
>>> rik.show()
My name is Ricky
>>> rik.__str__()
'My name is Ricky'
>>> print rik
My name is Ricky
代码应该解释自己。
__str__
(here the documentation) __str__
是一个特殊方法名称,这意味着当你调用print rik
时,如果定义了这样的方法,那么python会寻找rik.__str__
,然后调用它rik.__str__()
1}}和将返回的字符串将被打印。
要点__str__
:
print
string
。show
另一方面,调用show()
直接打印字符串(并返回None
)。就是这样。