为了账号安全,请及时绑定邮箱和手机立即绑定

类中的变量需要帮助

类中的变量需要帮助

料青山看我应如是 2023-07-27 16:32:27
我在处理类中的变量时遇到了一些问题。假设我有这门课:some_number = 200class Numbers:    def __init__(self):        self.number = some_number    def edit(self):        self.number = self.number - 50    def printNumber(self):        print(self.number)如果我在 shell 中运行:number = Numbers()number.edit()number.printNumber()这会打印数字 150 但这:print(some_number)打印数字 200。如何在类中更改变量 some_number,然后打印它返回编辑后的值?
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

该变量some_number位于类之外,因此不会改变。最简单的方法是避免类并修改变量some_number。另一种选择是some_number完全放弃并执行以下操作:


class Numbers:

    def __init__(self, number):

        self.number = number

    def edit(self):

        self.number = self.number - 50

    def printNumber(self):

        print(self.number)

那会被称为这样:


number = Numbers(150)

number.edit()

number.printNumber()

编辑该变量的方法有很多,但这是两种可能的方法。


需要注意的是,全局变量可能会很棘手,但在全局范围内声明它也可以。


查看完整回答
反对 回复 2023-07-27
?
桃花长相依

TA贡献1860条经验 获得超8个赞

您将该变量声明some_number为全局变量。将属性添加.number到Numbers类的全部目的是使其特定于类的每个实例。


你可以改变some_number作为副作用,但你为什么要这样做呢?


如果你有充分的理由,你会这样做:


some_number = 200



class Numbers:

    def __init__(self):

        self.number = some_number

    def edit(self):

        global some_number

        self.number = self.number - 50

        some_number = self.number

    def printNumber(self):

        print(self.number)



n = Numbers()

n.edit()

n.printNumber()

print(some_number)

但更有可能的是,你想要这样的东西:


some_number = 200



class Number:

    def __init__(self, number):

        self.number = number


    def edit(self, change):

        self.number = self.number + change


    def __str__(self):

        return str(self.number)



n = Number(some_number)

n.edit(-50)

print(n)

print(some_number)

将内容保留在全局变量中通常是一个非常糟糕的主意,除非有充分的理由让一个值可供所有程序使用,并且该值的更改会影响整个程序。即使在这些情况下,通常最好显式传递该值,而不是仅仅引用它,并赌它具有正确的值。


对于类,如果确实有充分的理由,则应该考虑使用类属性而不是全局变量,这将使该类的所有实例的一个值保持相同,但至少没有全局变量影响。


查看完整回答
反对 回复 2023-07-27
?
富国沪深

TA贡献1790条经验 获得超9个赞

您可以通过以下方式访问和更改some_number范围global


class Numbers:

    def edit(self):

        global some_number

        some_number = some_number - 50


    def printNumber(self):

        print(some_number)

不过,一般来说,需要修改全局变量通常都指向设计问题......


查看完整回答
反对 回复 2023-07-27
  • 3 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信