Obiekty klasy obsługują dwa rodzaje operacji: odwołania do atrybutów i tworzenie instancji
Odwołania do atrybutów używają standardowej składni stosowanej dla wszystkich odniesień do atrybutów w Pythonie: obj.name. Prawidłowe nazwy atrybutów to wszystkie nazwy, które były w przestrzeni nazw klasy podczas tworzenia obiektu klasy. Jeśli więc definicja klasy wyglądała tak:
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
return 'hello world'
Następnie MyClass.i
i MyClass.f
są ważne odniesienia cechę, powracający liczbę całkowitą i obiekt funkcję, odpowiednio. Można także przypisać atrybuty klas, dzięki czemu można zmienić wartość MyClass.i
według przypisania. __doc__
jest również prawidłowym atrybutem zwracającym ciąg dokumentów należący do klasy: „Prosta przykładowa klasa”.
Tworzenie instancji klasy wykorzystuje notację funkcji. Udawaj, że obiekt klasy jest funkcją bez parametrów, która zwraca nową instancję klasy. Na przykład:
x = MyClass()
Operacja tworzenia instancji („wywołanie” obiektu klasy) tworzy pusty obiekt. Wiele klas lubi tworzyć obiekty z instancjami dostosowanymi do określonego stanu początkowego. Dlatego klasa może zdefiniować specjalną metodę o nazwie __init__()
, taką jak ta:
def __init__(self):
self.data = []
Kiedy klasa definiuje __init__()
metodę, instancja klasy automatycznie wywołuje __init__()
nowo utworzone wystąpienie klasy. W tym przykładzie nową zainicjowaną instancję można uzyskać przez:
x = MyClass()
Oczywiście __init__()
metoda może zawierać argumenty za większą elastycznością. W takim przypadku argumenty podane operatorowi tworzenia instancji klasy są przekazywane do __init__()
. Na przykład,
class Complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
x = Complex(3.0, -4.5)
x.r, x.i
Zaczerpnięte z oficjalnej dokumentacji, która w końcu najbardziej mi pomogła.
Oto mój przykład
class Bill():
def __init__(self,apples,figs,dates):
self.apples = apples
self.figs = figs
self.dates = dates
self.bill = apples + figs + dates
print ("Buy",self.apples,"apples", self.figs,"figs
and",self.dates,"dates.
Total fruitty bill is",self.bill," pieces of fruit :)")
Podczas tworzenia wystąpienia klasy Bill:
purchase = Bill(5,6,7)
Dostajesz:
> Buy 5 apples 6 figs and 7 dates. Total fruitty bill is 18 pieces of
> fruit :)
x = 'Hello'
poza init, ale wewnątrz klasy? czy to jest jak Java, gdzie jest to samo, czy staje się jak zmienna statyczna, która jest inicjowana tylko raz?