В коде Visual Studio мне не нравится видеть ошибки в моем углу, если они не кажутся важными, но, возможно, я должен сделать что-то по-другому. Я получаю это сообщение об ошибке при использовании одного из моих сеттеров в классе, который я написал.
В экземпляре объекта значение, используемое для установки одного из свойств, является целым числом, но при доступе к свойству оно возвращает объект со своими собственными свойствами. Visual Studio Code не нравится это при использовании для него установщика, потому что он полагает, что вы пытаетесь получить доступ к свойствам целого числа, которых нет у целых чисел, но при запуске кода это работает гладко.
Это базовый код с разными именами для всего. Eggs - это параметр, который выдает ошибку при использовании его установщика.
class MyClass:
#values used when the eggs property is accessed
__EGG_VALUES = (('foo1','bar1'),('foo2','bar2'),('foo3','bar3'),('foo4','bar4'))
def __init__(self, spam, eggs=0):
if type(spam) is not str:
raise ValueError('Spam must be a string.')
if eggs not in range(4):
raise ValueError('Eggs must be an integer between 0 and 3.')
self.__spam = spam
self.__eggs = eggs
@property
def eggs(self):
pass
@eggs.setter
def eggs(self,new_value):
if new_value not in range(4):
raise ValueError('Eggs must be an integer between 0 and 3.')
self.__eggs = new_value
@eggs.getter
def eggs(self):
(first_value, second_value) = MyClass.__EGG_VALUES[self.__eggs]
return type('obj', (object,), {'first': first_value, 'second': second_value })
#a sample object
my_class_object = MyClass('name',eggs=1)
#using the setter for eggs
my_class_object.eggs = 3
#this works fine, but Visual Studio Code doesn't like it
print( my_class_object.eggs.first , my_class_object.eggs.second )
Это успешно выведет «foo4 bar4», но код Visual Studio выдаст мне эти ошибки для строки, в которой вызывается функция печати:
E1101:Instance of 'int' has no 'first' member
E1101:Instance of 'int' has no 'second' member
Я думаю, что это делает ошибку, потому что он увидел, что my_class_object.eggs был присвоен целое число, поэтому, когда свойство яйца было получено в функции печати, оно должно получать доступ к целому числу, но фактически оно обращается к объекту. Вот как мне нравится использовать этот класс для моего проекта. Я приму любые общие советы по коду в целом, но если в коде Visual Studio можно отключить определенные предупреждения об ошибках, мне бы этого хотелось, потому что я не думаю, что эти предупреждения необходимы, и они отвлекают и раздражают надо игнорировать, если они мне не нужны. Обычно я рад получить предупреждения, но не в таких ситуациях.