@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.
@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.
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
@arysto2011: 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?
@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.
Nasz specjalista od wszystkiego. Od kolei, od dziennikarstwa, od wojny, od rigczu. On widział to już dwa lata temu swoim przenikliwym plebejskim umysłem.
jeśli tworzymy instancje klasy to:
self.name = name
robimy po to, żeby mieć dostęp do tego name poprzez zmienna.name ?
to mogę potem w metodzie klasy:
def metoda(self, zmienna):
?
class Test:
____def __init__(self, name)
________self.name = name
test
https://medium.com/swlh/oop-basics-class-vs-instance-attributes-in-python3-7a6cfb577282
czy to będzie działać?
https://pastebin.com/dQtX7Djz
__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 poprzezself
. Co oznacza, ze chcesz uzyc atrybutow tej konkretnej instancji.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?
https://pastebin.com/SA3C0XAZ
__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.
dodajemy do instancji klasy self.name = "adam" tak?
@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
i w metodach jedynie self jako argument?
@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.W uproszczeniu - tak.
def _init(self, name, word):
self.name = name
self.word
self.name
- atrybut dla całej instancji.zmienna = Klasa("jeden", "dwa")
print(zmienna.name)
# da
To samo będzie jak zrobisz:
zmienna.name = "znowucosinnego"