我不确定我的方法是好的设计,我希望我能得到一个提示。我在想一个抽象方法,但在本例中,我希望方法是可选的。我现在就是这样做的。。。在
from pymel.core import *
class A(object):
def __init__(self, *args, **kwargs):
if callable(self.createDrivers):
self._drivers = self.createDrivers(*args, **kwargs)
select(self._drivers)
class B(A):
def createDrivers(self, *args, **kwargs):
c1 = circle(sweep=270)[0]
c2 = circle(sweep=180)[0]
return c1, c2
b = B()
在上面的例子中,我只是在PyMEL for Maya中创建了2个圆弧,但我完全打算创建更多的子类,这些子类可能有也可能根本没有createDrivers方法!所以我希望它是可选的,我想知道我的方法是否好,我的方法是否可以改进?在
你仍然有一个问题,当你继承你的类B,这将调用}不存在(AttributeError)我想如果我是你,我会这样做:
A.__init__
,如果你不在子类中实现createDrivers
,这行callable(self.createDrivers)
将抛出一个错误,因为{另一种方法是将
callable(self.createDrivers)
替换为hasattr(self, 'createDrivers')
。在如果您希望createDrivers是可选的,但仍然存在,那么最好的方法不是抽象方法,而是将其作为noop在基类中实现。在
我会这样做:
相关问题 更多 >
编程相关推荐