类继承和print / _str_()方法

时间:2012-01-13 17:02:05

标签: python string printing

我再次向另一个非常初级的问题道歉。出于这样或那样的原因,我似乎还无法从Java过渡到Python。我意识到Python有这些内置的方法可以帮助用户做事。但我想知道下面两段代码是否相同,或者是否一个“更正式”,因为它在Java中比其他代码更常用。

def print()
    print "My name is___"

def _str_()
   print "My name is___"

再一次,我的任何一种方法都可能完全错误(我的猜测是“ str ”方法。为了节省时间,我还没有写出类名和其他方法/ attributes。提前谢谢。

3 个答案:

答案 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)。就是这样。