python类特殊方法是否需要特殊名称?
第三节唯一改变的是名字,然后它就不起作用了 打印对象时,会隐式调用“toString”方法\uuuu str\uuuu。如果没有第三个示例中缺少的方法,Python就不知道如何将任意对象转换为字符串。函数调用特殊方法。如果您想编写自己的函数信息,可以这样做:python类特殊方法是否需要特殊名称?,python,class,Python,Class,第三节唯一改变的是名字,然后它就不起作用了 打印对象时,会隐式调用“toString”方法\uuuu str\uuuu。如果没有第三个示例中缺少的方法,Python就不知道如何将任意对象转换为字符串。函数调用特殊方法。如果您想编写自己的函数信息,可以这样做: class Dog: def __init__(self,name): self.char=name def __str__(self): return self.char >>
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>
编辑以供参考
python的开放性允许你做类似的事情,即使你有这样的编码约定,谢谢@Daniel的建议请不要意外地将其正确格式化。我们可能会错误地理解您想问的问题。为什么这会令人惊讶?为了将自定义对象转换为字符串,Python调用特殊的方法\uuuu str\uuuu,yes。所有特殊的魔法方法都有一个固定的名字。嗯,是的。这就是为什么它很特别。这是问题的外围,但仍然相关:您一直在混合制表符和空格以进行缩进。不要那样做。将编辑器配置为每个缩进级别始终使用4个空格字符。否则,您将面临难以发现的错误。下面是对Python的双下划线魔术方法的一个很好的介绍:PEP8专门为Python自己的文档化接口以外的任何东西使用双下划线名称。您不能这样做,但您可以这样做,只要告诉我您能够这样做,但重要的是要注意,不建议太多,谢谢
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'