python类特殊方法需要特殊名称吗?

2024-03-28 21:35:42 发布

您现在位置:Python中文网/ 问答频道 /正文

class Dog:
    def __init__(self,name):
        self.char=name
    def __str__(self):
        return self.char

>>> spok=Dog("dsakj")
>>> print(spok)
dsakj       

class Dog:
    def __init__(self,name):
        self.name=name
    def __str__(self):
        return self.name

>>> spok=Dog("akjds")
>>> print(spok)
akjds

class Dog:
    def __init__(self,name):
        self.name=name
    def __info__(self):
        return self.name

>>> spok=Dog("dnask")
>>> print(spok)
<__main__.Dog object at 0x0000000002FF5320> 

第三个地方唯一的变化就是名字,然后就没用了。你知道吗


Tags: nameselfinforeturninitdefclassprint
2条回答

特殊方法由函数调用。如果您想编写自己的函数信息,可以这样做:

def info(obj):
   if hasattr(obj,'__info__'):
       return obj.__info__()
   raise Exception('Not informable object')

class Dog:
   def __init__(self, name):
      self.name = name

   def __info__(self):
      print 'Informational note about class named : %s'%self.name

sparky = Dog('sparky')
info(sparky)

'Informational note about class named : sparky'

为提供信息而编辑

python的开放性允许您做类似的事情,即使您有这样的编码约定PEP 0008,谢谢@Daniel的建议

打印对象时,将隐式调用“toString”方法(__str__)。如果没有这个方法(在第三个示例中缺少),Python就不知道如何将任意对象转换为字符串。你知道吗

相关问题 更多 >