Об'єкти класу підтримують два види операцій: посилання на атрибути та інстанції
Посилання атрибутів використовують стандартний синтаксис, який використовується для всіх посилань на атрибути в Python: obj.name. Дійсні імена атрибутів - це всі імена, які були в просторі імен класу під час створення об’єкта класу. Отже, якщо визначення класу виглядало так:
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
return 'hello world'
тоді MyClass.i
і MyClass.f
є дійсними посиланнями атрибутів, повертаючи ціле число та об'єкт функції відповідно. Атрибути класу також можуть бути призначені, так що ви можете змінити значення MyClass.i
за призначенням. __doc__
також є дійсним атрибутом, повертаючи докстринг, що належить до класу: "Простий приклад класу".
Ідентифікація класу використовує позначення функції. Просто зробіть вигляд, що об’єкт класу є функцією без параметрів, яка повертає новий екземпляр класу. Наприклад:
x = MyClass()
Операція інстанції ("виклик" об'єкта класу) створює порожній об'єкт. Багато класів люблять створювати об'єкти з екземплярами, налаштованими під конкретний початковий стан. Тому клас може визначити спеціальний метод, названий __init__()
так:
def __init__(self):
self.data = []
Коли клас визначає __init__()
метод, екземпляр класу автоматично викликає __init__()
новостворений екземпляр класу. Отже, у цьому прикладі новий, ініціалізований екземпляр можна отримати:
x = MyClass()
Звичайно, __init__()
метод може мати аргументи для більшої гнучкості. У цьому випадку аргументи, надані оператору інстанції класу, передаються в __init__()
. Наприклад,
class Complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
x = Complex(3.0, -4.5)
x.r, x.i
Взяте з офіційної документації, яка мені найбільше допомогла.
Ось мій приклад
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 :)")
Коли ви створюєте екземпляр класу Bill:
purchase = Bill(5,6,7)
Ви отримуєте:
> Buy 5 apples 6 figs and 7 dates. Total fruitty bill is 18 pieces of
> fruit :)
x = 'Hello'
зовні init, але всередині класу? це як java там, де воно те саме, чи стає схожим на статичну змінну, яка ініціалізується лише один раз?