首先先上例子
from math import hypot
class Vector:
def __init__(self,x=0,y=0):
self.x=x
self.y=y
def __repr__(self):
return 'Vector(%r,%r)'%(self.x,self.y)
def __abs__(self):
return hypot(self.x,self.y)
def __bool__(self):
return bool(abs(self))
def __add__(self,other):
x=self.x+other.x
y=self.y+other.y
return Vector(x,y)
def __mul__(self,scalar):
return Vector(self.x*scalar,self.y*scalar)
以下我们列出了几个方法:加,欧几里得距离,乘法
v1=Vector(3,4)
v2=Vector(2,1)
v1+v2
abs(v1)
v1*3
Vector(5,5)
5.0
Vector(9,12)
明确一点,特殊方法是让python解释器调用的,我们定义的__mul__()方法就是一个特殊方法,但是不直接调用,当我们执行v1*3的时候,Python就自己调用__mul__()方法。特殊方法的命名并不是随心所欲的。这个例子中对象(也就是类)是自己创建的,所以Python就调用自己定义的__mul__方法。
对于内置的类,也包含许多特殊方法,并且运行内置类的特殊方法速度更快
- 元编程的概念
这里留一个元类介绍的连接:
元类介绍实战,简书