我有如下代码,我正在尝试重构它。在
# Abstract, do not instantiate Base
class Base:
...
class A(Base):
...
def func():
x = A(1, 2, 3)
x.x()
y = A(4, 5, 6)
y.y()
z = A(7, 8, 9)
z.z()
class B(Base):
...
def func():
x = B(1, 2, 3)
x.x()
y = B(4, 5, 6)
y.y()
z = B(7, 8, 9)
z.z()
class C(Base):
...
def func():
x = C(1, 2, 3)
x.x()
y = C(4, 5, 6)
y.y()
z = C(7, 8, 9)
z.z()
由于需要递归来解决的问题,类将通过func()
递归地调用自己(因此A将生成一些A,直到递归函数完成为止),而对我来说重构它的最好方法是动态创建类。如果有一种方法可以获得最终的运行时类,我可以将其重构为:
我不太了解Python及其反射功能,或者是否有其他更好的方法来实现这一点。在
这能做到吗?在
还有比反思更好的方法吗?在
注意:构造函数参数只是我编出来的任意占位符。在
注意2:性能与此无关,我只想知道这是否可能,如果可能——如何实现?在
编辑:根据回答的解决方案,此代码起作用:
class Test:
def __init__(self):
print("Made BaseClass")
def func(self):
rofl = self.__class__()
print(rofl.__class__)
class SubClass(Test):
def __init__(self):
super().__init__()
print("Made SubClass")
a = SubClass()
a.func()
可以使用值的
__class__
属性:我认为你真正想要的是使用类方法而不是常规方法。在
您似乎没有在任何地方使用
self
。实际上,您甚至不需要一个实例来实现这些函数的工作。所以:或者,对于你的真实情况:
^{pr2}$相关问题 更多 >
编程相关推荐