我想为数据类创建功能,使其能够继承 Python 中的 0..N 个混合项,同时仍返回原始数据类对象。
我有一个初步可行的解决方案,尽管非常丑陋并且不太Pythonic。
from typing import Any
from dataclasses import dataclass
@dataclass
class Customer:
salary = 0
monthlyBonus = 0
latestClassification = ""
class SalaryMixin:
def get_salary(self: Any) -> float:
return self.salary
class customerInformationMixin:
def get_latest_classification(self: Any) -> str:
return self.latestClassification
def create_customer(*mixins: Type) -> Customer:
customer = Customer()
for mixin in mixins:
mixin_methods = [func for func in dir(mixin) if callable(getattr(mixin, func)) and not func.startswith("__")]
for method in mixin_methods:
setattr(customer, method, getattr(mixin(), method))
return customer
最终我想要一个函数
create_customer()
,它将接受任意数量的混合并继承其功能。
最简单、最易于维护的解决方案是:
def create_customer(*mixins: Type) -> Type[Customer]:
class Customer(BaseCustomer, *mixins):
pass
return Customer()