【问题标题】:NameError: name 'di' is not defined in objectNameError:名称“di”未在对象中定义
【发布时间】:2020-05-26 15:20:02
【问题描述】:

我想在 str 中运行 di 但它显示 NameError: name 'di' is not defined when I run it.

class DicePile:

    def __init__(self, initQuantity, initSides,initrollCount = 0, initrolled = False): # constructor
        self.setQuantity(initQuantity)
        self.setSides(initSides)
        self.__rollcount = initrollCount
        self.rolled = initrolled

    def __str__(self): # generate a string representation of the object
        rc = '(roll count:' + str(self.__rollcount) + ')'
        if self.rolled:
            resultString = str(self.__results)
        else:
            resultString = 'not rolled'

        return di(self) + ': ' + resultString + rc

    def di(self):

        return str(self.__quantity) + 'd' + str(self.__sides)

我还在学习 OOP 和函数,这个问题困扰了我好几个小时

【问题讨论】:

  • 这不是你调用方法的方式。使用self.di()而不是di(self)
  • DicePile.di(self) 会起作用,但不建议这样做,因为它既单一又绕过继承。
  • 什么是setQuatitysetSides?我怀疑它们是微不足道的设置器,可以丢弃以支持直接分配给属性。

标签: python function oop


【解决方案1】:

你不会传递 self,你调用你的成员函数 on self。例如,

return self.di() + ': ' + resultString + rc

您可能想阅读Python tutorial on classes

【讨论】:

    【解决方案2】:

    在你使用 DicePile 对象的地方,首先创建一个对象: 例如:

    dice_pile = DicePile()
    

    然后在调用你的方法时:

    test = dice_pile.di()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      • 2018-01-24
      • 1970-01-01
      • 2021-04-15
      • 2019-01-26
      • 2021-10-05
      相关资源
      最近更新 更多