类中的变量需要帮助

我在处理类中的变量时遇到了一些问题。


假设我有这门课:


some_number = 200


class 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,然后打印它返回编辑后的值?


料青山看我应如是
浏览 116回答 3
3回答

红颜莎娜

该变量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()编辑该变量的方法有很多,但这是两种可能的方法。需要注意的是,全局变量可能会很棘手,但在全局范围内声明它也可以。

桃花长相依

您将该变量声明some_number为全局变量。将属性添加.number到Numbers类的全部目的是使其特定于类的每个实例。你可以改变some_number作为副作用,但你为什么要这样做呢?如果你有充分的理由,你会这样做:some_number = 200class 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 = 200class 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)将内容保留在全局变量中通常是一个非常糟糕的主意,除非有充分的理由让一个值可供所有程序使用,并且该值的更改会影响整个程序。即使在这些情况下,通常最好显式传递该值,而不是仅仅引用它,并赌它具有正确的值。对于类,如果确实有充分的理由,则应该考虑使用类属性而不是全局变量,这将使该类的所有实例的一个值保持相同,但至少没有全局变量影响。

富国沪深

您可以通过以下方式访问和更改some_number范围globalclass Numbers:    def edit(self):        global some_number        some_number = some_number - 50    def printNumber(self):        print(some_number)不过,一般来说,需要修改全局变量通常都指向设计问题......
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python