【问题标题】:Class is giving output even when a variable is not defined globally即使没有全局定义变量,类也会给出输出
【发布时间】:2019-05-30 10:05:42
【问题描述】:

定义一个类,该类将使用getstring() 输入字符串,printstring() 将其转换为大写,并使用另一个函数__init__

class a:
    def __init__(self,b,c):
        self.b=b
        self.c=c
    def getstring(self):
        print "Please enter input"
        self.x=raw_input()
        return x
    def printstring(self):
        y=self.x.upper()
        return y
    def sum(self):
        c=self.c+self.b
        return c
d=a(23,53)
d.getstring()
d.printstring()

结果是输入字符串应该被转换为大写。此代码正在运行,但它不应该因为 x 没有全局范围。

另一个奇怪的事情是,如果在上面的代码中,调用了“sum”函数,那么输入字符串不会转换为大写。它只会打印输入中给出的字符串并给出总和。

【问题讨论】:

  • self.x 具有类范围,因此它与类对象一起使用。无论您使用self 访问什么都具有类范围。它们可用于类对象
  • 但是如果我调用 sum 为什么它不起作用,如果我包含另一行 - d.sum() 那么它不会转换为大写
  • 因为转换成uppercase是写在printstring里面而不是sum里面
  • 我的意思是,如果我调用 getstring、printstring 和 sum,那么大写就不起作用了。
  • 它不会那样工作。至少您必须在 sum 内致电 printstring

标签: python python-2.7 class


【解决方案1】:

要获得大写结果,请更改您的 getstring 函数,如下所示:

def getstring(self):
    print "Please enter input"
    self.x=raw_input().upper()
    return x

您需要在变量中分配str.upper() 结果,upper() 方法不起作用

【讨论】:

  • 我的疑问是为什么当我包含 d.sum() 并且没有 d.sum() 时它会出错
  • @PrejithAlex 什么样的错误?请详细说明或发布一些堆栈跟踪
【解决方案2】:

此代码正在运行,但它不应该因为 x 没有全局范围。

gettering 函数中的 x 没有全局范围,但 self.x 有,它与对象一起使用,您不需要全局。

另一个奇怪的事情是,如果在上面的代码中,调用了“sum”函数,那么输入字符串不会转换为大写。它只会打印输入中给出的字符串并给出总和。

它仍然在我的电脑上变成大写,我想这可能是因为你使用的是 python 2.7 而我使用的是 3.6。如果你还没有完成很多项目,我建议你现在切换,因为许多库与 2.7 不兼容

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    相关资源
    最近更新 更多