我一直在阅读描述类继承、抽象基类甚至python接口的文档。但没有什么是我想要的。也就是说,一种构建虚拟类的简单方法。当虚拟类被调用时,我希望它根据给定的参数实例化一些更具体的类,并将其交回调用函数。现在,我有一个将调用重新路由到虚拟类到底层类的摘要方法。
想法如下:
class Shape:
def __init__(self, description):
if description == "It's flat": self.underlying_class = Line(description)
elif description == "It's spiky": self.underlying_class = Triangle(description)
elif description == "It's big": self.underlying_class = Rectangle(description)
def number_of_edges(self, parameters):
return self.underlying_class(parameters)
class Line:
def __init__(self, description):
self.desc = description
def number_of_edges(self, parameters):
return 1
class Triangle:
def __init__(self, description):
self.desc = description
def number_of_edges(self, parameters):
return 3
class Rectangle:
def __init__(self, description):
self.desc = description
def number_of_edges(self, parameters):
return 4
shape_dont_know_what_it_is = Shape("It's big")
shape_dont_know_what_it_is.number_of_edges(parameters)
我的重新路由远不是最优的,因为只传递了对number_of_edges()函数的调用。在形状中添加类似的内容也不会起到作用:
def __getattr__(self, *args):
return underlying_class.__getattr__(*args)
我做错什么了?整个想法执行得不好吗?非常感谢您的帮助。
Python没有现成的虚拟类。您必须自己实现它们(这应该是可能的,Python的反射功能应该足够强大,可以让您这样做)。
但是,如果您需要虚拟类,那么为什么不使用一种编程语言,它确实有虚拟类,如Beta、gBeta或Newspeak?(顺便问一下:还有其他的吗?)
不过,在这个特定的例子中,我并没有看到虚拟类如何简化您的解决方案,至少在您给出的示例中没有看到。也许你可以解释一下为什么你认为你需要虚拟课程?
别误会:我喜欢虚拟类,但事实上,只有三种语言实现过它们,只有其中一种仍然存在,而且这三种语言中的0种实际上被任何人使用,这多少说明了
我更喜欢和工厂合作:
或:
从Shape继承类
我同意TooAngel,但我会使用__new__ method。
相关问题 更多 >
编程相关推荐