Python OOP:创建一个对象,该对象是多个 类 的实例
Python OOP: create an object that is an instance of multiple classes
假设我构建了一些包含一些实例方法的 classes:
class A:
def func_of_A(self):
print("foo")
class B:
def func_of_B(self):
print("bar")
我如何构建一个 object/variable c
是 A
和 B
的实例,以便我可以同时调用 c.func_of_A()
和 c.func_of_B()
?
我当然可以构建一个新的 class 继承自 A
和 B
并使 c
成为其中的一员:
class C(A,B):
pass
c = C()
但这不是我要找的。我不想在每次计划使用已构建的组合时创建一个新的 class。
我还可以创建一个函数来动态定义一个新的 class 和 return 它的一个实例:
def merge(*inherit_from):
class D(*inherit_from):
pass
return D()
c = merge(A,B)
但这不是诅咒,因为现在 merge(A,B)
、merge(A)
和 merge(B)
都是 return 相同的类型 <class '__main__.merge.<locals>.D'>
。
应该有一个预期的方法来做到这一点,不是吗?
是否有一种解决方案可以很好地适应所涉及的 classes 的数量?如果我已经有 class A1
, class A2
, ..., class A100
并且我想构造一些 c
作为 class A2, class A23, class A72, class A99
的实例而不是其他实例我该怎么做?给定 ~2^100 种组合,为每种组合创建新的 class 几乎是不可能的。
您可以使用 type()
作为 @deceze 提到的
>>> class A:
... def a():
... pass
...
>>> class B:
... def b():
... pass
...
>>> def merge(name: str, *parents):
... return type(name, parents, dict())
...
>>> C = merge("C", A, B)
>>> C.a()
>>> C.b()
>>>
假设我构建了一些包含一些实例方法的 classes:
class A:
def func_of_A(self):
print("foo")
class B:
def func_of_B(self):
print("bar")
我如何构建一个 object/variable c
是 A
和 B
的实例,以便我可以同时调用 c.func_of_A()
和 c.func_of_B()
?
我当然可以构建一个新的 class 继承自 A
和 B
并使 c
成为其中的一员:
class C(A,B):
pass
c = C()
但这不是我要找的。我不想在每次计划使用已构建的组合时创建一个新的 class。
我还可以创建一个函数来动态定义一个新的 class 和 return 它的一个实例:
def merge(*inherit_from):
class D(*inherit_from):
pass
return D()
c = merge(A,B)
但这不是诅咒,因为现在 merge(A,B)
、merge(A)
和 merge(B)
都是 return 相同的类型 <class '__main__.merge.<locals>.D'>
。
应该有一个预期的方法来做到这一点,不是吗?
是否有一种解决方案可以很好地适应所涉及的 classes 的数量?如果我已经有 class A1
, class A2
, ..., class A100
并且我想构造一些 c
作为 class A2, class A23, class A72, class A99
的实例而不是其他实例我该怎么做?给定 ~2^100 种组合,为每种组合创建新的 class 几乎是不可能的。
您可以使用 type()
作为 @deceze 提到的
>>> class A:
... def a():
... pass
...
>>> class B:
... def b():
... pass
...
>>> def merge(name: str, *parents):
... return type(name, parents, dict())
...
>>> C = merge("C", A, B)
>>> C.a()
>>> C.b()
>>>