![](/img/trans.png)
[英]What is the Python “Magic” method used in the “bafang-python” package?
[英]what is the role of magic method in python?
根据我的理解,诸如__str__
__next__
, __next__
__setattr__
__next__
, __next__
__setattr__
类的魔术方法是Python的内置功能。 创建实例对象时,它们会自动调用。 它还起着覆盖的作用。 我会忽略或忽略魔术方法的其他一些重要功能吗?
python中的“魔术”方法在特定上下文中执行特定操作。
例如,要“覆盖”加法运算符(+),可以定义__add__
方法。 减法是__sub__
,等等。
在对象创建期间会调用其他方法( __new__
__init__
, __init__
)。 其他方法用于特定的语言构造( __enter__
__init__
, __next__
__exit__
,您可能会争论__init__
和__next__
)。
确实,魔术方法没有什么特别之处 ,除了可以保证语言在特定时间调用它们之外。 作为程序员,您将有权挂接到结构中并更改对象在这种情况下的行为方式。
有关接近完整的摘要,请查看python 数据模型 。
魔术方法可以做很多事情,并且由于很难找到正确的入门方法,因此我想给您一些有关我正在使用的东西的启发。
虽然您可能已经在使用其中的一些方法(例如__init__
),但我将开始学习特定于操作员的魔术方法,这些方法对我及其类的使用非常有帮助。 例如,魔术方法__mul__
允许您描述在被乘法运算符调用的情况下类应该发生什么。 在下面的示例中,您可以看到,解释器首先查找被乘数的__mul__
方法,如果该方法不存在(如第二个示例一样),它将尝试调用乘数的__rmul__
方法。
范例1:
class a:
def __mul__(self, other):
print("__mul__ a")
def __rmul__(self, other):
print("__rmul__ a")
class b:
def __mul__(self, other):
print("__mul__ b")
def __rmul__(self, other):
print("__rmul__ b")
ia = a()
ib = b()
ia * ib
# prints __mul__ a
范例2:
class a:
pass
class b:
def __mul__(self, other):
print("__mul__ b")
def __rmul__(self, other):
print("__rmul__ b")
ia = a()
ib = b()
ia * ib
# prints __rmul__ b
任何其他操作员都与此示例相对应。 我希望这可以帮助您开始增强魔术方法的技能。
暗示:
为了使您的课程具有可比性,您可以使用__cmp__。 用比较的两个类调用该方法。 如果头等舱较大,则返回正值。 如果第二个类更大,则返回一个负值。 如果它们的大小相同,则返回零。 您不必为每种可能性都使用魔术方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.