【问题标题】:Static Method Attribute Error In PythonPython中的静态方法属性错误
【发布时间】:2023-03-15 23:34:01
【问题描述】:

在.../CthuluPackage 在 CthuluCore.py 中,我有:

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 时,我收到消息:

AttributeError: type object 'Dice' has no attribute '_SkillCheckResult__RollSkillMenu'

这真的让我很困惑,因为据我所知,我并没有尝试调用任何名为 Dice 的东西。SkillCheckResult_RollSkillMenu,我只是想调用 Dice.RollSkillMenu。为什么 python 在我的方法调用前面加上这个?

【问题讨论】:

  • 你真的写了Dice.__RollSkillMenu()吗?
  • 我可能有,是的。我只是想找到一种方法来编辑这篇文章

标签: python-3.2


【解决方案1】:

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

看起来__RollSkillMenu 不应该是Dice 类的内部。如果是这样,那么不要让名称以两个下划线开头。只使用一个,或者如果它应该是公共接口的一部分,则根本不要使用任何下划线。事实上,您可能需要考虑将其完全移出课堂。

如果它应该是 Dice 类的内部,然后停止尝试从 SkillCheckResult 访问它。

【讨论】:

    猜你喜欢
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 2014-02-18
    • 2013-03-28
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多