как избежать pylint (не повторяющегося) в этом коде?

аналогично: question: Как избегайте pylint not-an-iterable при использовании настраиваемого класса свойств

Я только начал кодировать и не понял приведенный выше код

Этот код работает, но я получаю две предупреждающие ошибки во втором определении

1, pylint (без аргументов) (но я использую его в классе)

2, pylint (не повторяется) (в списке клиентов во 2-м определении)

class Customer:
    def __init__(self, name, membership_type):
        self.name = name
        self.membership_type = membership_type
    def print_all_customers(customerlist):
        for customer in customerlist:
            print(customer,'\n')

customerlist = [Customer('shagun','gold'),Customer('hero','diamond'),Customer('sid','gold')]
Customer.print_all_customers(customerlist)

как избежать этих ошибок в этом коде, объясните простыми словами


person Hero    schedule 03.02.2021    source источник
comment
Подобные предупреждения обычно связаны с нарушением соглашения PEP 8 из-за создания вещей, которые могут нарушить ваш код. Обычно это хорошая идея - следовать соглашению, но иногда вы обходитесь по своим собственным причинам. В этом случае вам, вероятно, следует просто следовать соглашению. Ваш код будет работать, но рекомендуется делать это правильно для повторного использования и масштабируемости.   -  person OakenDuck    schedule 03.02.2021


Ответы (2)


В вашем коде есть две основные проблемы. Во-первых, вам нужен строковый метод, который предоставляет строковое представление вашего объекта Customer, чтобы вы могли его распечатать. Во-вторых, ваша функция print_all_customers () должна находиться вне вашего класса - это не подходящий метод класса. Исправление кода также избавляет от ошибок pylint.

class Customer:
    def __init__(self, name, membership_type):
        self.name = name
        self.membership_type = membership_type

    def __str__(self) -> str:
        return f'Customer {self.name} is a {self.membership_type} member.'

def print_all_customers(lst):
    for customer in lst:
        print(customer)

customerlist = [Customer('shagun','gold'),Customer('hero','diamond'),Customer('sid','gold')]
print_all_customers(customerlist)

#prints:
#Customer shagun is a gold member.
#Customer hero is a diamond member.
#Customer sid is a gold member.
person pakpe    schedule 03.02.2021

Я поддержал другой ответ: пакпе дал то, как код должен выглядеть в конце. Возникла проблема с дизайном.

Имея это в виду, ваша основная проблема заключается в том, что метод экземпляра должен иметь в качестве первого аргумента «self». Если вам нужна статическая функция, вы должны украсить ее статическим методом:

Ie:

class Customer:
    def print_all_customers(self, customers):
        ...

customer = Customer()
customer.print_all_customers(customers)

Or:

class Customer:
    @staticmethod
    def print_all_customers(customers):
        ...

Customer.print_all_customers(customers)

Без @staticmethod мы ожидаем, что первым аргументом будет self, то есть экземпляр Customer, а не список. См. Также Различие между staticmethod и classmethod

person Pierre.Sassoulas    schedule 17.02.2021