Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我在课堂上需要变量方面的帮助_Python - Fatal编程技术网

Python 我在课堂上需要变量方面的帮助

Python 我在课堂上需要变量方面的帮助,python,Python,我在课堂上遇到了一些变量问题(顺便说一下,我是个初学者) 假设我有这门课: 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) 如果我在sh

我在课堂上遇到了一些变量问题(顺便说一下,我是个初学者)

假设我有这门课:

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在类中更改,然后打印它返回编辑的值呢?

您可以通过

class Numbers:
    def edit(self):
        global some_number
        some_number = some_number - 50

    def printNumber(self):
        print(some_number)

但是,一般来说,修改全局变量的需要通常指向一个设计问题…

您可以通过

class Numbers:
    def edit(self):
        global some_number
        some_number = some_number - 50

    def printNumber(self):
        print(some_number)

然而,一般来说,修改全局变量的需要通常指向一个设计问题…

变量
某些数值
在类之外,因此它不会更改。最简单的方法是避免使用类并修改变量
some\u number
。另一种方法是删除一些编号,然后执行以下操作:

课程编号:
定义初始化(自身,编号):
self.number=number
def编辑(自我):
self.number=self.number-50
def打印编号(自身):
打印(自我编号)
这将被称为:

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)
number=number(150)
number.edit()
number.printNumber()
有许多方法可以编辑该变量,但有两种可能的方法


需要注意的是,全局变量可能会变得棘手,但将其声明为全局变量也会起作用。

变量
的某些编号在类之外,因此它不会更改。最简单的方法是避免使用类并修改变量
some\u number
。另一种方法是删除一些编号,然后执行以下操作:

课程编号:
定义初始化(自身,编号):
self.number=number
def编辑(自我):
self.number=self.number-50
def打印编号(自身):
打印(自我编号)
这将被称为:

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)
number=number(150)
number.edit()
number.printNumber()
有许多方法可以编辑该变量,但有两种可能的方法


需要注意的是,全局变量可能会变得棘手,但将其声明为全局变量也会起作用。

您将变量
某些编号
声明为全局变量。将属性
.number
添加到
Numbers
类的整个要点是,它特定于类的每个实例

作为副作用,您可以更改
一些\u编号,但您为什么要这样做

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

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)
在全局变量中保留内容通常是一个非常糟糕的主意,除非有非常好的理由让一个值可用于所有程序,而对该值的更改会影响整个程序。即使在这些情况下,也最好明确地传递值,而不是仅仅引用它,打赌它具有正确的值


在一个类的情况下,如果你有一个很好的理由,你应该考虑一个类属性而不是一个全局变量,它将保持一个值对于类的所有实例都是相同的,但是至少没有全局的副作用。将属性

.number
添加到
Numbers
类的整个要点是,它特定于类的每个实例

作为副作用,您可以更改
一些\u编号,但您为什么要这样做

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

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)
在全局变量中保留内容通常是一个非常糟糕的主意,除非有非常好的理由让一个值可用于所有程序,而对该值的更改会影响整个程序。即使在这些情况下,也最好明确地传递值,而不是仅仅引用它,打赌它具有正确的值


在一个类的情况下,如果你有一个很好的理由,你应该考虑一个类属性而不是一个全局变量,它将保持一个值对于类的所有实例都是相同的,但是至少没有全局的副作用。这样做的动机是什么?你可以在说了

global some\u number
之后,在
edit
中重新分配它,就像你在使用
self.number
一样。你确定你需要这样做吗?为什么要给对象一个内部状态,然后同时更改内部和外部状态?类不应该修改其定义之外的变量。这将违反封装原则。您还必须更改一些\u编号。当类变量改变时,全局变量就改变了。创建一个依赖于全局变量的类似乎不是一个好的设计。这样做的动机是什么?你可以在说了
global some\u number
之后,在
edit
中重新分配它,就像你在使用
self.number
一样。你确定你需要这样做吗?为什么要给对象一个内部状态,然后同时更改内部和外部状态?类不应该修改其定义之外的变量。这将违反封装原则。您还必须更改一些\u编号。它并没有神奇地链接到类外变量,当类变量改变时,全局变量会改变。谢谢!我没有意识到我要做的是使用一个全局变量。我将研究为什么使用全局变量通常不受欢迎。谢谢!我没有意识到我试图做的是使用全局变量