2014-03-19 54 views
1

在.../CthuluPackage 在CthuluCore.py,我有:静态方法属性错误在Python

class Dice(object): 
    @staticmethod 
    def __RollSkillMenu(): 
     bonus=int(input("Bonus>")) 
     penalty=int(input("Penalty>")) 
     return Dice.RollSkill(bonus-penalty) 

在CthuluSkills.py,我有

from CthuluPackage.CthuluCore import * 
import inspect 
class SkillCheckResult(object): 
    def __init__(self,targetSkill): 
     self.TargetSkill=targetSkill 
     print(Dice) 
     self.Roll=Dice.__RollSkillMenu() 

当我试图创建SkillCheckResult,我得到的消息:

​​

这真的让我困惑,因为据我所知我不是试图调用任何名为骰子。 SkillCheckResult _RollSkillMenu,我只是想拨打Dice.RollSkillMenu。为什么python会将此前缀添加到我的方法调用中?

+0

你真的写了'Dice .__ RollSkillMenu()'吗? – user2357112

+0

我可能有,是的。我只是想找到一种方法来编辑这篇文章 – Benjamin

回答

0

出现在以两个下划线开头并且不以下划线结尾的类体内的任何名字都会自动获得_TheNameOfTheClass前缀。如此命名的方法或属性应该是类内部的;如果您想从子类或其他外部代码访问它们,则必须手动添加_TheNameOfTheClass前缀。

看起来__RollSkillMenu不应该在Dice类的内部。如果是这样,那么不要以两个下划线开始名称。只需使用一个,或者如果它应该是公共接口的一部分,则根本不使用任何下划线。

相关问题