📜  Python中的Dunder或魔术方法

📅  最后修改于: 2022-05-13 01:55:07.845000             🧑  作者: Mango

Python中的Dunder或魔术方法

Python中的Dunder或magic方法是方法名称中具有两个前缀和后缀下划线的方法。 Dunder在这里的意思是“双下(下划线)”。这些通常用于运算符重载。魔术方法的几个例子是: __init__, __add__, __len__, __repr__等。

用于初始化的__init__方法在创建类实例时无需任何调用即可调用,就像某些其他编程语言(如 C++、 Java、C#、 PHP等)中的构造函数一样。这些方法是我们可以添加两个字符串的原因 ' +'运算符,没有任何显式类型转换。

这是一个简单的实现:

# declare our own string class
class String:
      
    # magic method to initiate object
    def __init__(self, string):
        self.string = string
          
# Driver Code
if __name__ == '__main__':
      
    # object creation
    string1 = String('Hello')
  
    # print object location
    print(string1)

输出 :

<__main__.String object at 0x7fe992215390>


上面的代码片段只打印了字符串对象的内存地址。让我们添加一个__repr__方法来表示我们的对象。

# declare our own string class
class String:
      
    # magic method to initiate object
    def __init__(self, string):
        self.string = string
          
    # print our string object
    def __repr__(self):
        return 'Object: {}'.format(self.string)
  
# Driver Code
if __name__ == '__main__':
      
    # object creation
    string1 = String('Hello')
  
    # print object location
    print(string1)

输出 :

Object: Hello


如果我们尝试向它添加一个字符串:

# declare our own string class
class String:
      
    # magic method to initiate object
    def __init__(self, string):
        self.string = string
          
    # print our string object
    def __repr__(self):
        return 'Object: {}'.format(self.string)
  
# Driver Code
if __name__ == '__main__':
      
    # object creation
    string1 = String('Hello')
      
    # concatenate String object and a string
    print(string1 +' world')

输出 :

TypeError: unsupported operand type(s) for +: 'String' and 'str'


现在将__add__方法添加到 String 类:

# declare our own string class
class String:
      
    # magic method to initiate object
    def __init__(self, string):
        self.string = string 
          
    # print our string object
    def __repr__(self):
        return 'Object: {}'.format(self.string)
          
    def __add__(self, other):
        return self.string + other
  
# Driver Code
if __name__ == '__main__':
      
    # object creation
    string1 = String('Hello')
      
    # concatenate String object and a string
    print(string1 +' Geeks')

输出 :

Hello Geeks

参考:文档。Python.org。