【发布时间】:2018-01-16 03:09:48
【问题描述】:
据我了解var 是一个类变量:
class MyClass:
var = 'hello'
def __init__(self):
print(self.var)
这是一个实例变量:
class MyClass:
def __init__(self, var):
self.var = var
print(self.var)
我遇到了问题,我正在寻找一种方法来为实例变量提供类型提示。我当然可以使用 def __init__(self, var: str): 输入参数,但这不会影响 instance 变量 本身。
然后我注意到在一些描述(如here)中,他们使用术语实例变量来表示var,如下所示:
class MyClass:
var : str = 'hello'
def __init__(self, var : str = None):
self.var = var if var
print(self.var)
这确实是一个解决方案,但这仍然是一个实例变量吗?因为它是在类体中定义的,所以在我的理解中它是一个类变量。如果您对 var 使用列表,则对这个 list-var 的所有更改都将在实例上共享。
但是在这种情况下不会有问题,因为字符串被替换并且不会被其他实例共享。但是,如果您将其称为 instance variable 对我来说似乎是错误的,而且我不知道是否应该像这样使用它只是为了让类型提示起作用。
【问题讨论】:
-
用实例变量覆盖类变量是一种反模式。你应该避免使用它。
def __init__(self, var: str):有什么问题?它向用户表明var应该是一个字符串。 -
根据我的翻译,这是
SyntaxError。 -
@Goyo 这是在 Python 3.5 中实现的
-
我正在使用python 3.6
-
@James 问题是,
__init__方法中的本地var将被输入提示,而不是实例变量本身。当我在另一种方法中使用self.var时,解释器和IDE 不会知道这应该是一个字符串
标签: python type-hinting