Ski*_*eak -1 python methods scope class class-variables
所以我最近刚接触 Python,但我似乎能够编写一些东西并让它工作。然而,我一直在尝试扩展我对语言中事物如何工作的知识,而将这个简单的文件放在一起让我感到困惑。
class TestA:
def __init__(self):
self.varNum = 3
def printNum(self):
print(self.varNum)
class TestB:
varNum = 0
def __init__(self):
varNum = 3
def printNum(self):
global varNum
print(varNum)
a = TestA()
a.printNum()
b = TestB()
b.printNum()
Run Code Online (Sandbox Code Playgroud)
TestA将3 正确打印到屏幕的代码。然而,代码TestB却给了我NameError这样的说明:'varNum' is not defined。无论我是否有global varNum这条线,我都会收到该错误。
我想令我困惑的是我将该__init__函数视为类构造函数。当我使用 Java 或 C# 等语言进行编程时,我在构造函数之外声明了全局变量,以便它们的作用域是整个类。这不是 Python 中的东西吗?我编写的代码只是标记self.了所有内容,因为我只是想快速地将一些东西放在一起,但我现在正在尝试更多地了解该语言。self.Python 中创建类作用域变量的唯一方法是什么?或者还有其他方法吗?
谢谢你的时间 :)
在 Python 中,在类定义内部而不是在方法内部声明的变量是类变量或静态变量:
class TestB:
varNum = 0
Run Code Online (Sandbox Code Playgroud)
这将创建一个类级varNum变量,但这与任何实例级varNum变量不同,因此您可以:
class TestB:
varNum = 0
def __init__(self):
self.varNum = 3
b = TestB()
print(b.varNum) # print 3
print(TestB.varNum) # print 0
Run Code Online (Sandbox Code Playgroud)
因此,类TestB应该以这种方式工作:
class TestB:
varNum = 0
def __init__(self):
self.varNum = 3
def printInstanceNum(self):
print(self.varNum)
def printClassNum():
print(TestB.varNum)
b = TestB()
b.printInstanceNum() # print 3
TestB.printClassNum() # print 0
Run Code Online (Sandbox Code Playgroud)
请注意,由于 method 中没有对实例对象的任何引用printClassNum(),因此我们不必将其作为self参数。该方法实际上可以成为静态方法:
class TestB:
varNum = 0
@staticmethod
def printClassNum():
print(TestB.varNum)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2906 次 |
| 最近记录: |