Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności: PyStok #42 - wystąpią Łukasz Langa i Dominik Kozaczko
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: pytanie w sprawie zmiennych klasowych i zmiennych instancji  (Przeczytany 278 razy)
« : 20:03 28/03/19 »
jarekj9 Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 2


Cześć,
 szukam porady kogoś bardziej doświadczonego.

Rozumiem do pewnego stopnia pojęcia zmiennych klasowych i zmiennych instancji, jednak jest jeden przypadek, który mi nie daje spokoju, a nie znalazlem dobrego wytlumaczenia, oto przykład:

Kod
class KLASA():  
   def fun1(self):
       self.fun2("TRALALA")
 
   def fun2(self,input):
       print(input)         #robimy tak...
 
       self.input=input     #albo tak...
       print(self.input)
 
 
o1=KLASA()
o1.fun1()
 

Pytanie: W funkcji fun2, self.input jest naturalnie zmienną instancji. W takim razie czym jest input ?
Jest to zmienna lokalna w funkcji fun2, ale nie jest zmienną instancji(?),bo nie jestem pewien czy można ją nazwać zmienna klasową skoro jest lokalna.
Zapisane
« Odpowiedz #1 : 19:44 29/03/19 »
wektor Offline
Hello World!

Zobacz profil
*

Reputacja: 6
Wiadomości: 39


input jest parametrem metody który wewnątrz metody jest zmienną tak samo jak parametry dla zwykłej funkcji
self.input jest to atrybut obiektu(instancji) który wewnątrz klasy możesz używać jako zmienną
w tym przypadku atrybut będzie stworzony po uprzednim wywołaniu którejś z metod
gdybyś użył konstruktora to byłby dostępny od razu
class KLASA(): 
    def fun1(self):
        self.fun2("TRALALA")
       
 
    def fun2(self,input):
        print(input)         #robimy tak...
 
#        self.input=input     #albo tak...
#        print(self.input)
       
o = KLASA()
o.fun1()
o.fun2('lala')

class KLASA():
    def p(self):
        print(self.input)
    def fun1(self):
        self.fun2("TRALALA")
 
    def fun2(self,input):
#        print(input)         #robimy tak...
 
        self.input=input     #albo tak...
        print(self.input)
       
o = KLASA()
o.fun1()
o.fun2('lala')       
print(o.input)

natomiast zmienna klasowa czyli jak sądzę chodzi ci o atrybut klasy będzie dostępny w każdym obiekcie(instancji) i będzie taki sam dla wszystkich oraz przez klasę

class KLASA():
    atrybut_klasy = 'jestem_at_klasy'
    def get_at_klasy(self):
        print(KLASA.atrybut_klasy)

print(KLASA.atrybut_klasy)
o = KLASA()
o1 = KLASA()
o.get_at_klasy()
o1.get_at_klasy()
Zapisane
« Odpowiedz #2 : 10:36 15/04/19 »
jarekj9 Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 2


Dzieki,
zgodnie z tym, co napisales:
Cytuj
input jest parametrem metody który wewnątrz metody jest zmienną tak samo jak parametry dla zwykłej funkcji
wnioskuję, że input jest w zasadzie też atrybutem obiektu ponieważ żeby go użyć musze stworzyć obiekt, inaczej metody nie wywołam.

Całe pytanie wzieło się z tego, że zastanawiałem się czy dla porządku robić wewnątrz funkcji tak : 'self.input=input' , czy po prostu używac samego 'input'.
Zapisane
« Odpowiedz #3 : 15:06 15/04/19 »
wektor Offline
Hello World!

Zobacz profil
*

Reputacja: 6
Wiadomości: 39


No nie jest bo jeżeli coś jest atrybutem to można go wywołać za pomocą notacji z kropką
print(o.atrybut)

Kod
class KLASA(): 
   def fun1(self,input1):
       print(input1)        
 
   def fun2(self,input2):
       self.input2=input2    
       print(self.input2)
 
o = KLASA()
o.fun1('input1')
o.fun2('input2')
 
try:
   print('Jestem atrybutem:', o.input1)
except:
   print('Obiekt nie ma takiego atrybutu')
 
try:
   print('Jestem atrybutem:', o.input2)
except:
   print('Obiekt nie ma takiego atrybutu')



Zapisane
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2019 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot