Сообщения об ошибках кода Visual Studio при использовании сеттеров в Python 3 - PullRequest
0 голосов
/ 01 сентября 2018

В коде 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 можно отключить определенные предупреждения об ошибках, мне бы этого хотелось, потому что я не думаю, что эти предупреждения необходимы, и они отвлекают и раздражают надо игнорировать, если они мне не нужны. Обычно я рад получить предупреждения, но не в таких ситуациях.

...