python - Python:如何根据特定条件创建类
问题描述
这是问题陈述。
场景是我有很多平台,每个平台都有一定的独特身份,让我们把它看作是显卡、硬件、软件和接口。
每个平台都可以运行与给定平台兼容的特定命令集。
例子:
- 平台1:生肖:GC1、HW1、SW1、INT1
- ……
- 平台 n : Star: GCn, HWn, SWn, int n
我需要以这样的方式编写代码,以便脚本分析它是哪个平台并运行特定于该平台的命令。
到目前为止,我已经尝试过,
class Platform(object):
a = None
B = None
C = None
D = None
def __init__(self, A,B, C, D):
self.A = A
self.B = B
self.C = C
self.D = D
class ZODIAC(Platform):
A = attr.A_map_dict
def __init__(self, A, B, C, D):
super(ZODIAC, self).__init__(A, B, C, D)
解决方案
我会创建一组子类,然后使用一个完全独立的方法来分析您的参数并生成您想要的类:
class Platform(object):
a = None
b = None
...
def __init__(self, A, B, C, D):
...
...
def execute_commands():
# abstract method - platform-specific, defined by subclasses
class ZODIAC(Platform):
A = attr.A_map_dict
...
@override
def execute_commands():
# platform-specific behavior, overriding superclass
def generate_platform(a, b, c, d):
if a == 'onething' and b == 'anotherthing':
return ZODIAC(a, b, c, d)
elif c == 'somethingelse':
return OTHER_PLATFORM(a, b, c, d)
...
以这样的方式编写generate_platform()
,它可以根据给定的变量确定哪个平台是正确的。然后它将返回适当子类的实例Platform
。这是多态性原理的例证,它是面向对象编程的支柱之一。
推荐阅读
- java - Java在运行时使用Module api将外部jar添加到类路径
- postgresql - 在 MacOS (Big Sur) 上安装 PostgreSQL 13.3 失败并出现错误:无法使用 initdb 初始化数据库集群
- go - 如何在 GoLang 中的 http2 传输上设置 MaxConnsPerHost
- visual-studio-2019 - Visual Studio 为特定文件类型 (.glsl) 禁用 C++ IntelliSense
- redux - Redux - 保持或清理从 API 接收到的数据处于状态?
- css - 当容器中只有一项时,CSS flex 默认结束
- jira - 搜索 fixVersion jira 字段的输入
- c++ - 从字符串到 int 的双射,也就是可逆哈希
- python - 我对 pyttx3 有问题。我应该怎么办?
- ruby-on-rails - 如何在更新的 rails3.1 应用程序中保留旧的 activerecord 2.3 associations.rb