我遇到子类问题。我们的任务是尽可能多地使用继承。现在我收到了这个错误,显然我一定是做错了。
如果我想从子类中调用它,{
"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__
答案 0 :(得分:2)
具有前导双下划线的属性意味着“私有”,无法从其他类访问。
Python通过在访问属性时将类名放在属性前面来实现此目的。这就是您在错误消息中获得_Plant__symbol
的原因。
最简单的解决方案是将__symbol
重命名为没有两个前导下划线的内容,以使其可以从其他类访问。
str()方法在这里工作,因为它调用Test对象__repr__
方法,Test对象可以访问自己的'private'属性。