Не получается создать класс в python

Всем привет! Пытаюсь создать класс, чтобы чтобы при вводе положительного числа, оно добавлялось в список, а при вводе отрицательного программа писала, что число отрицательное.

Вот моё подобие кода:

class Spisok:
    def append(self, x):
        if x > 0:
            Spisok.append(x)
        else:
            print('Число меньше 0')

lst = Spisok
lst.append(5)

Я в этом деле почти совсем нулячий, прочитал уже кучу статей и посмотрел кучу роликов по ооп, но до сих пор не могу понять даже азы. Пара вопросов:

  1. Надо ли здесь писать def __init__(self) и зачем он нужен? Я читал что эта штука инициализирует класс, кто-то называет это конструктором класса, и я не понимаю нужен ли он, потому что часто его вообще не используют в лёгких программах.
  2. Как сделать, чтобы можно было вводить сразу кучу чисел, я знаю про *args, но опять же не понимаю как это реализовать. Программа не даёт мне писать if *args > 0 =\

Заранее огромное спасибо! Очень хочу во всё разобраться честно!


Ответы (2 шт):

Автор решения: Амин

Метод __init__ выполняется при создании каждого нового экземпляра класса. Грyбо говоря в твоём слyчае каждый раз при создани экземпляра класса Spisok, мы создаем пyстой список self.lst. Первый аргумент, self, он получает от интерпретатора, остальные передаются классу в круглых скобках при создании экземпляра.

class Spisok:
    def __init__(self):
        self.lst = []

    def append(self, x):
        if x > 0:
            self.lst.append(x)
        else:
            print('Число меньше 0')


lst = Spisok()
lst.append(5)
lst.append(-5)

Есть еще вопросы?

→ Ссылка
Автор решения: Shamus Rezol

Вам прямая дорога читать о магических методах и продолжать изучать ООП.

__init__ - инициализатор нового экземпляра. Где использовать? Везде. Пока что. К примеру у вас есть класс человека. У людей есть имена. Одно на всех? Нет. Так инициализатор решает это как лучший друг.

class человек(object):
    расса = "человек он, вроде."
    def __init__(self, name: str = "TobaSko"):
        self.name = name

В этом случае для каждого человека мы передадим его индивидуальное имя. Имя (self.name) будет дано каждому экземпляру при его инициализации:

a = человек()
b = человек("Shamus_Rezol")

print(a.name, b.name, sep = " vs ")

 

TobaSko vs Shamus_Rezol

Конечно же, его можно поменять и после, но, в основном, только если у тебя нету инициализатора, что не очень то и удобно (ключевое слово: удобства):

class человек(object): pass
a = человек()
a.name = "Комментатор"

Звездочка знаменует то, что аргумент передастся как кортеж (tuple), а при сдвоеной как словарь (dict). После них бессконечность аргументов. Первый тип - просто аргументы. Второй тип - именованые аргументы (немножко = True).

def Ломай(*arguments, **options):
    print(type(arguments), type(options), sep = "; ")
    
    options.setdefault("немножко", False)
    
    if options["немножко"]:
        print("Совсем уж немножко ", end = str())
    
    for argument in arguments:
        print(argument, end = ' ')
    
    print(str())# 2 NL (\n)

Ломай("изогнул шею", "и пробил болевой", немножко = True, не_бей_кома_обос = "передастся и будет в options, но попросту проигнорируется за отсутствием реализации")

 

<class 'tuple'>; <class 'dict'>
Совсем уж немножко изогнул шею и пробил болевой

Ваши лучшие друзья

Это type и dir. Нелепо обходить их стороной при изучении языка. Очень хорошие штуки, делающие штучки. Эксперименты, эмперический путь и только! Чуть не забыл. GOOGLE.COM тоже.

→ Ссылка