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。