Wpis z mikrobloga

@mizantrol: co chcesz osiągnąć? Obie funkcje maja odmienny scope i nie - nie zadziała bez definicji klasy.

__init__() jest specjalna funkcja i definiuje argumenty wymagane podczas iniicjalizacji instancji obiektu. Wtedy mozesz uzywac atrybutow takiej instancji z zaprogramowanymi wartosciami. Wewnatrz klasy wlasciwe jej metody i atrybuty adresujesz poprzez self. Co oznacza, ze chcesz uzyc atrybutow tej konkretnej instancji.
  • Odpowiedz
@arysto2011: nic nie chcę osiągnąć, ale zrozumieć.

czyli jak chcę używać zmiennych z _init_ w metodzie to muszę zrobić:

self.zmienna = zmienna

i w metodzie używać self.zmienna? muszę to podawać jako argument metody?
  • Odpowiedz
@mizantrol: Sa dwa podejscia. Mozesz uzyc __init__() i kazac definiowac instancje wg przepisu z init (wtedy konstruktor bedzie wymagal tych wlasnie atrybutow na dzien dobry).

Druga opcja, to zostawic init pusty, albo go nie definiowac nawet i dynamicznie dodawac atrybuty i ich wartosci do instancji.

1. Podejscie nr.
  • Odpowiedz
czyli jak chcę używać zmiennych z init w metodzie to muszę zrobić:

self.zmienna = zmienna

i w metodzie używać self.zmienna? muszę to podawać jako argument metody?


@mizantrol: Chodzi o podstawy OOP - obiektowego paradygmatu. Tworzysz "obiekty", czyli twory będące polaczeniem danych (atrybutów) i. funkcji, operacji, które można na tych danych przeprowadzić. Jeżeli masz klasę Test, która wymaga podczas inicjalizacji podania atrybutu "name", to znaczy, że możesz stworzyć wiele różnych obiektów według tego przepisu. Każdy z nich będzie miał atrybut name z wartością podaną podczas
  • Odpowiedz
to mogę potem w metodzie klasy:

def metoda(self, zmienna):

?


@mizantrol: Możesz, ale to nie będzie zmienna z __init__, scope zawęża się do metody i będzie rozpatrywał pewną zmienną (którą musisz podać) wewnątrz tej funkcji.
  • Odpowiedz
@mizantrol:

czyli jak wymagam w init argumentów to potem mogę dowolnie ich używać w metodach klasy po przydzieleniu self.argument.

i w metodach jedynie self jako argument?


W uproszczeniu - tak.
  • Odpowiedz