gpt4 book ai didi

python - python实现中的联合与继承

转载 作者:行者123 更新时间:2023-12-05 03:40:18 24 4
gpt4 key购买 nike

假设我们有这个类。

class MyConfig():
config_type : SomeEnum
retries: int
context: Context

此上下文取决于类型的值,这意味着上下文取决于其值。哪种 Context 实现最好?为什么一个比另一个更好。


class MySpecificContext:
value: int
name: str

class OtherUnrelatedContext:
length:int
position: int

Contex = Union[MySpecificContex,OtherUnrelatedContext]

class Context:
pass

class MySpecificContext(Context):
value: int
name: str

class OtherUnrelatedContext(Context):
length:int
position: int

更具体一点。假设你有一个配置类,这个配置将保存用于配置进程的数据。此过程将包含一些与所有配置相关的内容,例如 retries 值。但是,预计基于 config_type 还需要一个额外的上下文。这与特定的配置类型高度相关。请注意,这些类仅保存数据,预计它们将来不会实现任何行为。但是,预计将扩展 SomeEnum 枚举,并在某个时候添加更多“上下文”。将我的配置视为不可变的。

最佳答案

以下是我可能会采用的方法:

from enum import Enum
from typing import Generic, NamedTuple, TypeVar, Union


class MySpecificContext(NamedTuple):
value: int
name: str


class OtherUnrelatedContext(NamedTuple):
length: int
position: int


Context = Union[MySpecificContext, OtherUnrelatedContext]
_T = TypeVar("_T", bound=Context)


class SomeEnum(Enum):
MY_SPECIFIC = 1
OTHER_UNRELATED = 2


config_types = {
MySpecificContext: SomeEnum.MY_SPECIFIC,
OtherUnrelatedContext: SomeEnum.OTHER_UNRELATED,
}


class MyConfig(Generic[_T]):
def __init__(self, context: _T, retries: int):
self.retries = retries
self.context = context

@property
def config_type(self) -> SomeEnum:
return config_types[type(self.context)]

编码您所说的两个属性之间的类型关系是很棘手的;如果没有不同的 MyConfig 子类,我想不出任何方法来做到这一点。另一方面,如果您可以从另一个派生出一个,那么一开始就让它们成为独立的属性是没有意义的,这就是为什么我刚刚将 config_type 变成了一个属性这是从 config 派生的。 (这是假设你已经习惯了这个接口(interface)——我会去掉枚举和映射,直接使用上下文类型,这样需要维护的代码就更少了。)

关于python - python实现中的联合与继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68183495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com