python中交织在一起的类

时间:2016-02-13 15:29:18

标签: python class oop

我发现自己有布局问题。我有一个实例方法返回另一个类的实例,但这样做需要第一个实例。例如:

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让我失望了。

0 个答案:

没有答案