4

我有两个类继承自同一个基类但不想互相玩,确实是年轻人。

class A() : 
  ...

class B(A) : 
  ...

class C(A) : 
  ...

b=B()
c=C()
c.method(b)

给我一个 c 和 b 不一样的 TypeError,python 需要什么认为它们是一样的?是否应该实施一些 __SpecialThingIDontKnowAbout__ 属性/方法?还是有一些我缺少的类设计技巧

具体来说,我继承 TreeDict() 如下:

class TNode(TreeDict):
 def __init__(self,*args,**kwargs) : 
  super(TNode, self).__init__(*args, **kwargs)

class LNode(TreeDict):
 def __init__(self,*args,**kwargs) : 
  super(LNode, self).__init__(*args, **kwargs)

TN = TNode(); TN.A = 1
LN = LNode(); LN.A = 1
LN.attach('TN',TN)

Traceback (most recent call last):
  File "JSONE.py", line 430, in <module>
  LN.attach(TN)
TypeError: descriptor 'attach' requires a 'treedict.treedict.TreeDict' ...
object but received a 'type'

我确实知道孩子们属于“类型”并且需要“treedict^3”,但我如何让孩子们模仿这种行为?

编辑 :

嗯......它现在开始工作,并不是说我做了任何与我在撤消/重做历史中看到的不同的事情(谢谢大家)

4

1 回答 1

1

问题是 TreeDict 类型不允许子类化。我在treedict包中找到了它。TreeDict 类型本身是用 Cython 编写的。罪魁祸首是attach()方法中的这段代码(在treedict.pyx的第1910行附近):

    if type(tree_or_key) is str:
        key = <str>tree_or_key
    elif type(tree_or_key) is TreeDict:
        if tree is not None:
            raise TypeError("Only one TreeDict instance can be given to attach.")

        tree = <TreeDict>tree_or_key
        key = None
    else:
        raise TypeError("`tree_or_key` must be either a string or TreeDict instance.")

elif type(tree_or_key) is TreeDict:将行更改为elif isinstance(tree_or_key, TreeDict):并向项目提交补丁。您可能需要检查 treedict.pyx 的其余部分是否存在相同错误的其他情况。

于 2012-08-03T01:45:29.430 回答