gpt4 book ai didi

python - 我应该在这个 Python 场景中使用抽象方法吗?

转载 作者:行者123 更新时间:2023-11-28 22:05:47 25 4
gpt4 key购买 nike

我不确定我的方法是否是好的设计,我希望我能得到提示。我正在考虑抽象方法的某个地方,但在这种情况下我希望该方法是可选的。这就是我现在正在做的...

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 时,这将调用 A.__init__ 并且如果你没有在子类中实现 createDriverscallable(self.createDrivers) 会抛出错误,因为 createDrivers 不存在(AttributeError)我想如果我是你,我会这样做:

class A(object):
def __init__(self, *args, **kwargs):
try:
self._drivers = self.createDrivers(*args, **kwargs)
select(self._drivers)
except NotImplementedError:
pass

def createDrivers(self, *args, **kwargs):
raise NotImplementedError("This class wasn't implemented")

class B(A):
def createDrivers(self, *args, **kwargs):
c1 = circle(sweep=270)[0]
c2 = circle(sweep=180)[0]
return c1, c2

class C(A):
pass

另一种方法是将 callable(self.createDrivers) 替换为 hasattr(self, 'createDrivers')

关于python - 我应该在这个 Python 场景中使用抽象方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4704541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com