AttributeError:'Corn'对象没有属性'_Plant__symbol'

时间:2015-12-13 22:32:11

标签: python inheritance

我遇到子类问题。我们的任务是尽可能多地使用继承。现在我收到了这个错误,显然我一定是做错了。

如果我想从子类中调用它,{ "rules": { "users": { "$user_id": { ".read": "auth != null && auth.uid == $user_id", ".write": "auth != null && auth.uid == $user_id" } }, "snippets": { "$module_id": { "$snipit_id": { "$user_id": { ".read": "auth != null && auth.uid == $user_id", ".write": "auth != null && auth.uid == $user_id && newData.parent().parent().parent().parent().child('modules').child($module_id).val() != null" } } } }, "modules": { "$user_id": { ".read": "auth != null && auth.uid == $user_id", ".write": "auth != null && auth.uid == $user_id" } } } } 会发生什么?我正在产生20个self.__symbol个物体,然后每个物体都会产生一个后代。

让我感到困惑的是,它必定存在于某个时刻,因为Plant使用我的__repr__修复程序进行了测试。如何让它保持可调用而不仅仅在子#temporary中重新定义它 - 因为这会违反继承的目的,不是吗?我使用__init__super().performAction()延伸的方式可能有问题吗?所有教程都提出了这种方法。

super().__init__

1 个答案:

答案 0 :(得分:2)

具有前导双下划线的属性意味着“私有”,无法从其他类访问。​​

Python通过在访问属性时将类名放在属性前面来实现此目的。这就是您在错误消息中获得_Plant__symbol的原因。 最简单的解决方案是将__symbol重命名为没有两个前导下划线的内容,以使其可以从其他类访问。​​

str()方法在这里工作,因为它调用Test对象__repr__方法,Test对象可以访问自己的'private'属性。