Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python类特殊方法是否需要特殊名称?_Python_Class - Fatal编程技术网

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 >>

第三节唯一改变的是名字,然后它就不起作用了

打印对象时,会隐式调用“toString”方法\uuuu str\uuuu。如果没有第三个示例中缺少的方法,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> 
编辑以供参考


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'