Mor*_*ten 26 python inheritance
假设我有两个不同的类实现
class ParentA:
def initialize(self):
pass
def some_event(self):
pass
def order(self, value):
# handle order in some way for Parent A
class ParentB:
def initialize(self):
pass
def some_event(self):
pass
def order(self, value):
# handle order in another for Parent B
Run Code Online (Sandbox Code Playgroud)
我怎样才能动态地让一些第三类继承ParentA或ParentB基于这样的东西?
class MyCode:
def initialize(self):
self.initial_value = 1
def some_event(self):
# handle event
order(self.initial_value)
# let MyCode inherit from ParentA and run
run(my_code, ParentA)
Run Code Online (Sandbox Code Playgroud)
shx*_*hx2 54
只需将类对象存储在变量中(在下面的示例中,它被命名base),并使用class语句的base-class-spec中的变量.
def get_my_code(base):
class MyCode(base):
def initialize(self):
...
return MyCode
my_code = get_my_code(ParentA)
Run Code Online (Sandbox Code Playgroud)
另外,您可以使用type内置的。可以调用的它带有参数:(name, bases, dct以最简单的形式)。
def initialize(self):
self.initial_value = 1
def some_event(self):
# handle event
order(self.initial_value)
subclass_body_dict = {
"initialize": initialize,
"some_event": some_event
}
base_class = ParentA # or ParentB, as you wish
MyCode = type("MyCode", (base_class, ), subclass_body_dict)
Run Code Online (Sandbox Code Playgroud)
这比snx2解决方案更明确,但仍然-我更喜欢他的方式。
PS。当然,您不必存储base_class或subclass_body_dict,也可以在type()调用中构建这些值,例如:
MyCode = type("MyCode", (ParentA, ), {
"initialize": initialize,
"some_event": some_event
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14134 次 |
| 最近记录: |