gpt4 book ai didi

python-3.2 - Python中的静态方法属性错误

转载 作者:行者123 更新时间:2023-12-05 05:27:00 25 4
gpt4 key购买 nike

在.../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 将此添加到我的方法调用之前?

最佳答案

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

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

如果它应该在 Dice 类内部,则停止尝试从 SkillCheckResult 访问它。

关于python-3.2 - Python中的静态方法属性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22498614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com