我发现自己有布局问题。我有一个实例方法返回另一个类的实例,但这样做需要第一个实例。例如:
class bar:
def __init__(self, barvalue, foo_instance, flag, x):
# munge barvalue based on foo_instance, flag and x
self._data = barvalue
class foo(basefoo):
def __init__(self, value, flag, x):
self._data=value # same as basefoo
if flag:
self._extra=x #absent in basefoo
innervalue=value
self.munged = bar(innervalue, self, flag, x)
self.munged = bar(value, self, x, y)
似乎有点hackish,所以我想检查这是否是最干净的方法。
如果需要,可以将bar设为foo的子类[ sic。嵌套类] - bar(basefoo(value),barvalue, flag, x)
的想法很好,但我可以写一个类方法将basefoo隐藏到foo。
但我不确定我会得到什么。在之前的编辑中,我误解了嵌套类的工作方式。事实证明,内部类(bar)没有收到自我形式self.bar
。我认为这是因为在__new__
之前调用了__init__
,但事实并非如此,因为__new__
没有收到自我形式self.bar
。但这是另一个问题的主题。
class foo(basefoo):
class bar:
def __init__(self, barvalue, foo_instance, flag, x):
# munge barvalue based on foo_instance, flag and x
self._data = barvalue
def __init__(self, value, flag, x):
self._data=value # same as basefoo
if flag:
self._extra=x #absent in basefoo
innervalue=value
self.munged = self.bar(innervalue, self)
#NOT self.munged = self.bar(innervalue)
并强制用户将basefoo对象转换为foo对象以获取bar(如果需要)?这是正确的思路吗?
这是我第二次发现自己写这个版面 - 另一个变得凌乱see GitHub repo of messy code。所以我不想重复这种混乱。
那么,这是最好的方式还是有一个聪明的伎俩?
此外,这种情况有名吗?我的google-fu让我失望了。