我有一个类如下的基类:
class Base(object):
def __init__(self, arg1, arg2):
#Declare self
self.arg1 = arg1
self.arg2 = arg2
@classmethod
def from_ini_file(cls, f):
# Get arg1 and arg2 from ini file
return cls(arg1, arg2)
然后我希望能够在派生类中使用classmethod构造函数。天真的,我试过了:
class Derived(Base):
def __init__(self):
f = 'default.ini'
Base.from_ini_file(f)
但这不起作用。我想我明白为什么这不起作用,但如果可能的话,我还无法弄清楚如何正确地做到这一点。
感谢您的帮助。
这感觉非常不优雅但我现在正在使用:
class Derived(Base):
def __init__(self):
t = Base.from_ini_file('default.ini')
Base.__init__(t.arg1, t.arg2)
这里有很多冗余操作,我不喜欢必须拥有Base的参数。 init 函数必须保存到对象中以这种方式使用。所以我全力以赴寻求更好的解决方案。再次感谢。
答案 0 :(得分:1)
from_ini_file
返回一个新实例,因此您必须从派生类调用此方法,同时形成一个classmethod:
class Derived(Base):
@classmethod
def from_default_ini(cls):
f = 'default.ini'
return cls.from_ini_file(f)
答案 1 :(得分:0)
我知道这太旧了,我确定你已经继续前进了,但我想我会分享我如何实现类似的东西
class Base(object):
def __init__(self, arg1, arg2):
#Declare self
self.arg1 = arg1
self.arg2 = arg2
@staticmethod
def from_ini_file(f):
# Get arg1 and arg2 from ini file
return Base(arg1, arg2)
myInstance = Base.from_ini_file(f)
如果你想完全隐藏 ini 文件:
class Derived(Base):
def __init__(self, f='default.ini'):
# Get arg1 and arg2 from ini file
super().__init__(arg1, arg2)
defaultInstance = Derived()
customInstance = Derived(customF)