面试题答案
一键面试元类设计思路
- 定义元类:元类本质上是一个类的类,它用于控制类的创建过程。在Python中,通过继承
type
类来创建自定义元类。 - 设置类属性:在元类的
__new__
方法中,动态为类添加属性。 - 重载运算符:在元类中定义运算符重载的方法,这些方法将在类实例进行相应运算时被调用。
类的创建过程
- 使用元类创建类:在定义类时,通过
metaclass
关键字指定使用的元类。 - 元类初始化:元类的
__new__
方法被调用,该方法负责创建类对象,并设置类的属性和方法。
运算符重载的具体实现代码
class VectorMeta(type):
def __new__(mcs, name, bases, attrs):
def add(self, other):
return Vector(self.x + other.x, self.y + other.y)
def sub(self, other):
return Vector(self.x - other.x, self.y - other.y)
def mul(self, other):
return Vector(self.x * other.x, self.y * other.y)
attrs['__add__'] = add
attrs['__sub__'] = sub
attrs['__mul__'] = mul
return super().__new__(mcs, name, bases, attrs)
class Vector(metaclass=VectorMeta):
def __init__(self, x, y):
self.x = x
self.y = y
v1 = Vector(1, 2)
v2 = Vector(3, 4)
v_add = v1 + v2
print(f"Addition result: ({v_add.x}, {v_add.y})")
v_sub = v1 - v2
print(f"Subtraction result: ({v_sub.x}, {v_sub.y})")
v_mul = v1 * v2
print(f"Multiplication result: ({v_mul.x}, {v_mul.y})")
在上述代码中:
VectorMeta
是自定义元类,继承自type
。- 在
VectorMeta
的__new__
方法中,定义了__add__
、__sub__
、__mul__
方法,实现向量的加法、减法和乘法运算。 Vector
类使用VectorMeta
作为元类,在创建Vector
类实例时,这些运算符重载方法就已经被设置好。- 创建
Vector
类的实例v1
和v2
,并进行加法、减法和乘法运算,输出结果。