0% нашли этот документ полезным (0 голосов)
16 просмотров16 страниц

Python Classes

Авторское право
© All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
0% нашли этот документ полезным (0 голосов)
16 просмотров16 страниц

Python Classes

Авторское право
© All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd

Python 

. Классы.

   
 Python  имеет  полноценную  поддержку  объектно­
ориентированного  программирования:  можно  определять 
собственные  классы,  наследоваться  от  встроенных  и 
собственных  классов  (одного  или  нескольких), 
производные классы могут переопределять любые методы 
базовых классов.

   
Определение класса

 Определения класса в языке Python начинается с    заре­
зервированного слова class и следующего за ним именем 
класса. Пример простейшего класса:
class Student :
pass
s=Student()
[Link]="Vasya"
[Link]=22
[Link]="AFTU"
print [Link], [Link], [Link]              # Vasya 22 AFTU
Объекты могут содержат произвольное количество 
собственных данных.
   
Определение методов класса

 class Student :
def f (self, n, y) :
[Link]=n
[Link]=y
print [Link], "is on the", [Link], "-th year"
s1=Student()
s2=Student()
s1.f ("Vasya", 5)
s2.f ("Petya", 6)
результат выполнения:
Vasya is on the 5­th year
 Petya is on the 6­th year

   
Метод  __init__()

 Если для класса определен метод __init__(), то он авто­ 
матически вызывается  сразу после создания экземпляра 
класса.
class Student :
def __init__(self, c) :
[Link]=c
def f (self, n, y) :
[Link]=n
[Link]=y
print [Link], "is on the", [Link], "-th year"
s=Student("[Link]")
print [Link]                # [Link]

   
Self

 Первым  аргументом  каждого  метода  класса  всегда 


является  текущий  экземпляр  класса.  Общепринято   
называть  этот  аргумент  self  (аналог  слова  this  в  С++).  Self 
ссылается  на  экземпляр  класса  для  которого  вызывается 
метод. В методе __init__ (рассмотрим далее) self ссылается 
на  только  что  созданный  объект.  При  вызове  метода  self 
не указывается,  Python добавит его автоматически.
 Экземпляры классов нет необходимости удалять явно, так 
как  удаление  происходит  автоматически,  когда  на  них 
больше нет ссылок.
def info():
s=Student("[Link]")
for i in xrange(100) :
 
info()  
 Совсем необязательно, чтобы определение функции 
находилось в определении класса: 
def f (self, x) :
print "Hello,", x
class C :
f1=f
def f2 (self) :
print "Hello, students!!!"
x=C() # результат выполнения:
x.f1("students!") # Hello, students!
x.f2() # Hello, students!!!

   
Атрибуты классов

 Слово  «объект»  в  языке  Python    необязательно  означает 


только экземпляр класса. В языке Python все типы данных 
являются  объектами.  И  классы  сами  являются  объектами, 
атрибуты  которых  есть  все  имена,  помещенные  в 
пространство имен класса при создании объекта­класса.
сlass MyClass:
'Simple Class'
i=123
def f(x) :
print “Hello!”
print MyClass.i # 123
print MyClass.__doc__ # Simple Class
MyClass.i=124
  print MyClass.i   # 124
Атрибуты классов
 x=MyClass()
x.f() # Hello!
MyClass.f(x) # Hello!
x.i=125
y=MyClass()
print x.i, y.i, MyClass.i # 125 124 124
 Атрибуты классов могут быть использованы как аналоги 
статических переменных классов в С++:
class Counter:
count = 0
def __init__(self) :
self.__class__.count += 1
print [Link] # 0
c = Counter()
print [Link], [Link] # 1 1
  d = Counter()  

print [Link], [Link], [Link] # 2 2 2


Частные атрибуты классов

 Говоря  в  терминологии  C++,  все  атрибуты  класса 


открытые  (public).  Атрибуты,  являются  частными,   
доступными    только  из  методов  объекта  класса,  если  их 
имена  содержат  не  менее  двух  символов  подчеркивания в 
начале и не более одного символа подчеркивания в конце:
class Student :
def __init__ (self, c) :
self.__city=c
def __f (self, n, y) :
[Link]=n
[Link]=y
print [Link], "is on the", [Link], "-th year"

   
s1=Student("[Link]")
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")
результат выполнения:
[Link]
Vanya is on the 5 ­th year
   
Наследование
 class Person :
def __init__(self, n) :
[Link]=n
def write(self) :
print [Link]
 class Student (Person) :
def __init__(self, gr, n) :
Person.__init__(self, n)
[Link]=gr
def write(self) :
print [Link], [Link] 
 p=Person("Petya")
[Link]() # Petya
s=Student(23, "Vasya")
   
[Link]() # Vasya 23
Множественное наследование

 class A1 :
def fb (self) :
print "class1"
class A2 :
def fb (self) :
print "class2"
class B(A1, A2) :
def f(self) :
[Link]()
b=B()
b.f()
результат выполнения:
class1
   
Полиморфизм

class Based: 
def __init__(self, n) :
[Link] = n
def out (self ):
print [Link]      
class One(Based) : 
def multi(self,m) : 
[Link] *= m     
class Two(Based) :
def inlist (self) :
[Link] = list(str([Link]))
def out(self) : 
i = 0
while i < len ([Link]) :
  print ([Link][i])  

i += 1       
obj1 = One(45)
obj2 = Two('abc')
[Link](2)
[Link]()
[Link]()
[Link]()
результат выполнения:
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>}

Вам также может понравиться