Przekazywanie zmiennych, tworzenie instancji, jaźń, mechanika i użycie klas: potrzeba wyjaśnienia [zamknięte]
Siedzę nad tym cały dzień i jestem już trochę zmęczony, więc proszę wybaczyć, że jestem krótki.
Jestem nowy w Pythonie.
Właśnie przepisałem działający program, na kilka funkcji w klasie i wszystko popaprane. Nie wiem, czy to ja, ale jestem bardzo zaskoczony, że nie mogłem znaleźć samouczka dla początkujących, jak obsługiwać klasy w Internecie, więc mam kilka pytań.
Pierwsza ze wszystkich, w sekcji __init__
klasy i zadeklarowałem kilka zmiennych z self.variable=something
.
Czy to prawda, że powinienem być w stanie uzyskać dostęp/modyfikować te zmienne w każdej funkcji klasy używając self.variable
w tej funkcji? Innymi słowy, deklarując self.variable
stworzyłem te zmienne, globalne zmienne w zakresie klasy, prawda?
Jeśli nie, jak mam sobie poradzić?
Po Drugie , jak poprawnie przekazać argumenty klasie? Jakiś przykładowy kod byłby fajny.
Po Trzecie , Jak nazwać funkcja klasy poza zakresem klasy? Jakiś przykładowy kod byłby fajny.
Po czwarte , Jak utworzyć instancję class INITIALCLASS
w innym class OTHERCLASS
, przekazując zmienne z OTHERCLASS
do INITIALCLASS
? Jakiś przykładowy kod byłby fajny.
Chcę wywołać funkcję z {[7] } z argumentami z INITIALCLASS
. Do tej pory zrobiłem to.
class OTHERCLASS():
def __init__(self,variable1,variable2,variable3):
self.variable1=variable1
self.variable2=variable2
self.variable3=variable3
def someotherfunction(self):
something=somecode(using self.variable3)
self.variable2.append(something)
print self.variable2
def somemorefunctions(self):
self.variable2.append(variable1)
class INITIALCLASS():
def __init__(self):
self.variable1=value1
self.variable2=[]
self.variable3=''
self.DoIt=OTHERCLASS(variable1,variable2,variable3)
def somefunction(self):
variable3=Somecode
#tried this
self.DoIt.someotherfunctions()
#and this
DoIt.someotherfunctions()
Najwyraźniej nie rozumiałem, jak przekazywać zmienne do klas lub jak obsługiwać self
, kiedy z nich korzystać, a kiedy nie. Prawdopodobnie nie rozumiałem również, jak poprawnie utworzyć instancję klasy. Ogólnie nie rozumiałem mechaniki zajęć, więc proszę o pomoc i wytłumaczenie mi tego, jakbym nie miał pojęcia (czego chyba nie mam). Albo wskaż mi dokładny film lub czytelny samouczek.
Wszystko, co znajduję w sieci, to super proste przykłady, które mi nie pomogły. Lub po prostu bardzo krótkie definicje klas I instancji metod klasowych itp.
Mogę wysłać ci mój oryginalny kod, jeśli chcecie, ale jest dość długi.
3 answers
class Foo (object):
# ^class name #^ inherits from object
bar = "Bar" #Class attribute.
def __init__(self):
# #^ The first variable is the class instance in methods.
# # This is called "self" by convention, but could be any name you want.
#^ double underscore (dunder) methods are usually special. This one
# gets called immediately after a new instance is created.
self.variable = "Foo" #instance attribute.
print self.variable, self.bar #<---self.bar references class attribute
self.bar = " Bar is now Baz" #<---self.bar is now an instance attribute
print self.variable, self.bar
def method(self, arg1, arg2):
#This method has arguments. You would call it like this: instance.method(1, 2)
print "in method (args):", arg1, arg2
print "in method (attributes):", self.variable, self.bar
a = Foo() # this calls __init__ (indirectly), output:
# Foo bar
# Foo Bar is now Baz
print a.variable # Foo
a.variable = "bar"
a.method(1, 2) # output:
# in method (args): 1 2
# in method (attributes): bar Bar is now Baz
Foo.method(a, 1, 2) #<--- Same as a.method(1, 2). This makes it a little more explicit what the argument "self" actually is.
class Bar(object):
def __init__(self, arg):
self.arg = arg
self.Foo = Foo()
b = Bar(a)
b.arg.variable = "something"
print a.variable # something
print b.Foo.variable # Foo
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-29 15:45:16
Oto prosty przykład użycia klas: Załóżmy, że jesteś Instytutem finansowym. Chcesz, aby konta Twoich klientów były zarządzane przez komputer. Więc musisz modelować te konta. To jest miejsce, w którym pojawiają się zajęcia. Praca z klasami nazywa się programowaniem zorientowanym obiektowo. Dzięki klasom modelujesz obiekty świata rzeczywistego w swoim komputerze. Czego potrzebujemy, aby założyć proste konto bankowe? Potrzebujemy zmiennej, która zapisuje saldo i taką, która zapisuje nazwę klienta. Dodatkowo niektóre metody w-i zmniejszyć równowagę. To może wyglądać tak:
class bankaccount():
def __init__(self, name, money):
self.name = name
self.money = money
def earn_money(self, amount):
self.money += amount
def withdraw_money(self, amount):
self.money -= amount
def show_balance(self):
print self.money
Teraz masz abstrakcyjny model prostego konta i jego mechanizm.
def __init__(self, name, money)
jest konstruktorem klas. Buduje obiekt w pamięci. Jeśli chcesz teraz otworzyć nowe konto, musisz utworzyć instancję swojej klasy. Aby to zrobić, musisz wywołać konstruktor i przekazać potrzebne parametry. W Pythonie konstruktor jest wywoływany przez nazwę klas:
spidermans_account = bankaccount("SpiderMan", 1000)
Jeśli Spiderman chce kupić M. J. nowy pierścień musi wypłacić trochę pieniędzy. Wywołałby metodę withdraw
na swoim koncie:
spidermans_account.withdraw_money(100)
Jeśli chce zobaczyć saldo dzwoni:
spidermans_account.show_balance()
Cała rzecz o klasach polega na modelowaniu obiektów, ich atrybutów i mechanizmów. Aby utworzyć obiekt, utwórz go jak w przykładzie. Wartości są przekazywane do klas za pomocą metod getter i setter, takich jak ' earn_money (). Metody te mają dostęp do zmiennych obiektów. Jeśli chcesz, aby Twoja klasa przechowywała inny obiekt, musisz zdefiniować zmienna dla tego obiektu w konstruktorze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-20 23:15:28
Cały punkt klasy polega na tym, że tworzy się instancję , a ta instancja zawiera zestaw danych. Więc źle jest mówić, że Twoje zmienne są globalne w ramach klasy: powiedzmy raczej, że instancja posiada atrybuty, a instancja może odnosić się do własnych atrybutów w dowolnym kodzie (poprzez self.whatever
). Podobnie, każdy inny kod podany instancji może użyć tej instancji, aby uzyskać dostęp do jej atrybutów-ie instance.whatever
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-10 21:09:59