Python Classes
Python Classes
. Классы.
Python имеет полноценную поддержку объектно
ориентированного программирования: можно определять
собственные классы, наследоваться от встроенных и
собственных классов (одного или нескольких),
производные классы могут переопределять любые методы
базовых классов.
Определение класса
Определения класса в языке Python начинается с заре
зервированного слова class и следующего за ним именем
класса. Пример простейшего класса:
class Student :
pass
s=Student()
s.name="Vasya"
s.age=22
s.univer="AFTU"
print s.name, s.age, s.univer # Vasya 22 AFTU
Объекты могут содержат произвольное количество
собственных данных.
Определение методов класса
class Student :
def f (self, n, y) :
self.name=n
self.year=y
print self.name, "is on the", self.year, "-th year"
s1=Student()
s2=Student()
s1.f ("Vasya", 5)
s2.f ("Petya", 6)
результат выполнения:
Vasya is on the 5th year
Petya is on the 6th year
Метод __init__()
Если для класса определен метод __init__(), то он авто
матически вызывается сразу после создания экземпляра
класса.
class Student :
def __init__(self, c) :
self.city=c
def f (self, n, y) :
self.name=n
self.year=y
print self.name, "is on the", self.year, "-th year"
s=Student("St.Petersburg")
print s.city # St.Petersburg
Self
Атрибуты классов
s1=Student("St.Petersburg")
print s1.__city
s1.__f ("Vanya", "5")
результат выполнения:
print s1.__city
AttributeError: Student instance has no attribute '__city'
print s1._Student__city
s1._Student__f("Vanya", "5")
результат выполнения:
St.Petersburg
Vanya is on the 5 th year
Наследование
class Person :
def __init__(self, n) :
self.name=n
def write(self) :
print self.name
class Student (Person) :
def __init__(self, gr, n) :
Person.__init__(self, n)
self.group=gr
def write(self) :
print self.name, self.group
p=Person("Petya")
p.write() # Petya
s=Student(23, "Vasya")
s.write() # Vasya 23
Множественное наследование
class A1 :
def fb (self) :
print "class1"
class A2 :
def fb (self) :
print "class2"
class B(A1, A2) :
def f(self) :
self.fb()
b=B()
b.f()
результат выполнения:
class1
Полиморфизм
class Based:
def __init__(self, n) :
self.numb = n
def out (self ):
print self.numb
class One(Based) :
def multi(self,m) :
self.numb *= m
class Two(Based) :
def inlist (self) :
self.inlist = list(str(self.numb))
def out(self) :
i = 0
while i < len (self.inlist) :
print (self.inlist[i])
i += 1
obj1 = One(45)
obj2 = Two('abc')
obj1.multi(2)
obj1.out()
obj2.inlist()
obj2.out()
результат выполнения:
90
a
b
c
Специальные атрибуты классов
Объектыклассы имеют следующие специальные атрибуты:
__name__ Имя класса.
__module__ Имя модуля, в котором класс определен.
__doc__ Строка документации класса или None, если
она не определенна.
__bases__ Кортеж базовых классов в порядке их
следования в списке базовых классов.
__dict__ Словарь атрибутов класса.
print Two.__name__ # Two
print Two.__module__ # _main_
print Two.__doc__ # None
print Two.__bases__ # (<class __main__.Based at 0xb7d6420c>,)
print Two.__dict__ # {'__module__': '__main__', 'inlist': <function
inlist at
0xb7d8d72c>, '__doc__': None,
'out': <function out at 0xb7d8d764>}