用于继承任意数量的类的装饰器/功能

问题描述 投票:0回答:1

我想为数据类创建功能,使其能够继承 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()
,它将接受任意数量的混合并继承其功能。

python python-3.x oop
1个回答
0
投票

最简单、最易于维护的解决方案是:

def create_customer(*mixins: Type) -> Type[Customer]: 
    class Customer(BaseCustomer, *mixins): 
        pass 
return Customer() 
© www.soinside.com 2019 - 2024. All rights reserved.