Python 如何编写具有类中对象列表的几乎类型安全的代码?
我正在寻找一种方法,在使用对象列表的同时,用Python编写几乎类型安全/可维护的代码。 我发现了以下实施intellisense功能的方法(在vscode中测试): 但是,当在类中使用时,相同的想法不再有效(关于intellisense):Python 如何编写具有类中对象列表的几乎类型安全的代码?,python,visual-studio-code,type-safety,Python,Visual Studio Code,Type Safety,我正在寻找一种方法,在使用对象列表的同时,用Python编写几乎类型安全/可维护的代码。 我发现了以下实施intellisense功能的方法(在vscode中测试): 但是,当在类中使用时,相同的想法不再有效(关于intellisense): 我猜应该有一个简单的解决方法。正如评论中指出的,您需要将v作为一个实例属性: class-MyClass: 定义初始化(自): self.v=[] def添加_元素(自身): a=MyObject() a、 键1=1 self.v.append(a) de
我猜应该有一个简单的解决方法。正如评论中指出的,您需要将
v
作为一个实例属性:
class-MyClass:
定义初始化(自):
self.v=[]
def添加_元素(自身):
a=MyObject()
a、 键1=1
self.v.append(a)
def use_元件(自身):
#这不显示(智能感知)
打印(self.v[0].key1)
但是您提到了类型安全,这意味着您还应该添加类型注释,并在代码上运行mypy,以确保所有代码都正确地使用了预期的类型
输入导入列表中的
类别MyClass:
定义初始化(自)->无:
self.v:List[MyObject]=[]
def添加元素(自身)->无:
a=MyObject()
a、 键1=1
self.v.append(a)
def use_元素(自身)->无:
#这不显示(智能感知)
打印(self.v[0].key1)
您已将v
定义为类级变量,并与该类的所有实例共享。您是对的。这就是为什么它实际上不起作用的原因!我这样做是为了可以像下面这样使用变量MyClass.v
是的,我在更宽松的术语中寻找类型安全性(只是类属性定义),但这是一个有用的补充
class MyObject(object):
key1 = None
key2 = None
a = MyObject()
v = []
def add_element():
a = MyObject()
a.key1 = 1
v.append(a)
add_element()
# this works (intellisense)
print(v[0].key1)
class MyClass():
v = []
def add_element(self):
a = MyObject()
a.key1 = 1
self.v.append(a)
def use_element(self):
# this does not show (intellisense)
print(self.v[0].key1)
c = MyClass()
c.add_element()
c.use_element()