Python 中的 Dunder 或魔法方法
原文:https://www.geeksforgeeks.org/dunder-magic-methods-python/
Python 中的 Dunder 或 magic 方法是在方法名中有两个前缀和后缀下划线的方法。邓德在这里的意思是“双下划线”。这些通常用于运算符重载。魔术方法的几个例子是:__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__
方法添加到字符串类中:
# 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
参考:docs.python.org。
版权属于:月萌API www.moonapi.com,转载请注明出处