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()
编辑该变量的方法有很多,但这是两种可能的方法。
需要注意的是,全局变量可能会很棘手,但在全局范围内声明它也可以。
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)
将内容保留在全局变量中通常是一个非常糟糕的主意,除非有充分的理由让一个值可供所有程序使用,并且该值的更改会影响整个程序。即使在这些情况下,通常最好显式传递该值,而不是仅仅引用它,并赌它具有正确的值。
对于类,如果确实有充分的理由,则应该考虑使用类属性而不是全局变量,这将使该类的所有实例的一个值保持相同,但至少没有全局变量影响。
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)
不过,一般来说,需要修改全局变量通常都指向设计问题......
添加回答
举报