我正在编写一个占位符Point and Rectangle函数,但是我想使用Zelle图形模块中的占位符
class Pt:
def __init__(self, x, y):
self.x = x
self.y = y
if ('graphics' in sys.modules):
return graphics.Point(x, y)
class R:
def __init__(self, tLPoint, w, h):
self.P1 = tLPoint
self.P2 = Pt(tLPoint.x + w, tLPoint.y + h)
self.x = tLPoint.x
self.y = tLPoint.y
if ('graphics' in sys.modules):
return graphics.Rectangle(P1, P2)
到目前为止,这就是我得到的代码,但是当您通过它返回某些内容时,__init__
会很烦人。
我想做的是返回Zelle的图形版本(如果存在),而不是自定义版本。
我不确定该怎么做,我们将为您提供帮助。
答案 0 :(得分:2)
由于类是Python中的对象,因此可以在模块级别将所需的类分配给变量。
if 'graphics' in sys.modules:
Point = graphics.Point
Rectangle = graphics.Rectangle
else
Point = Pt
Rectangle = R
答案 1 :(得分:0)
如果实例化特定类的实例,则不能使构造函数突然返回完全不同的类的实例。除了不工作之外,这还会令人难以置信。也许像这样适合您:
def create_point(*args, **kwargs):
if 'graphics' in sys.modules:
return graphics.Point(*args, **kwargs)
return Pt(*args, **kwargs)
然后,您仅在需要实例时使用create_point(x, y)
。