Ошибка Pylint с Python Turtle, хотя код выполняется правильно - PullRequest
0 голосов
/ 10 июля 2020
import turtle 


class Polygon: 
    def __init__(self,sides,name,size=100,color='black',line_thickness=3):
        self.sides=sides
        self.name=name 
        self.size=size
        self.color=color
        self.line_thickness=line_thickness
        self.interior_angles=(self.sides-2)*180
        self.angle=self.interior_angles/self.sides
    
    def draw(self):
        turtle.color(self.color)
        turtle.pensize(self.line_thickness)
        for i in range(self.sides): 
            turtle.forward(self.size)
            turtle.right(180-self.angle)
        turtle.done()

square=Polygon(4,'Square')
square.draw()

Принимая во внимание приведенный выше код, работающий в VSCODE, мне интересно, как избавиться от всех постоянно всплывающих ошибок pylint, которые предлагают нечто подобное следующему:

Module 'turtle' has no 'color' member (pylint no-member)

Несмотря на то, что код выполняется отлично, продолжать смотреть на строки ошибок тревожно, и мне интересно, есть ли решение для этого. Спасибо за уделенное время!

1 Ответ

0 голосов
/ 11 июля 2020

Почему бы не исправить код вместо того, чтобы подавлять сообщение об ошибке? Turtle представляет два API: функциональный один и объектно-ориентированный . Функциональный является производным от объектно-ориентированного при загрузке времени. Инструменты анализа не могут заглянуть внутрь файла исходной библиотеки и увидеть функциональные сигнатуры.

Поскольку вы определяете свой собственный Polygon объект , я не понимаю, почему вы не использовать объектно-ориентированный интерфейс для черепахи. import, который я использую ниже, блокирует функциональный интерфейс и разрешает доступ только к объектно-ориентированному интерфейсу:

from turtle import Screen, Turtle

class Polygon:
    def __init__(self, sides, name, size=100, color='black', line_thickness=3):
        self.sides = sides
        self.name = name
        self.size = size
        self.color = color
        self.line_thickness = line_thickness
        self.interior_angles = (self.sides - 2) * 180
        self.angle = self.interior_angles / self.sides

    def draw(self):
        turtle.color(self.color)
        turtle.pensize(self.line_thickness)

        for _ in range(self.sides):
            turtle.forward(self.size)
            turtle.right(180 - self.angle)

screen = Screen()
turtle = Turtle()

square = Polygon(4, 'Square')
square.draw()

screen.exitonclick()

Обратите внимание на тонкие изменения в коде для поддержки объектно-ориентированного API. Теперь попробуйте проанализировать код, чтобы увидеть, решит ли это вашу проблему.

...