Объекты класса поддерживают два вида операций: ссылки на атрибуты и создание экземпляров.
Ссылки на атрибуты используют стандартный синтаксис, используемый для всех ссылок на атрибуты в 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, где это то же самое, или это становится как статическая переменная, которая инициализируется только один раз?