Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

python-02

.pdf
Скачиваний:
45
Добавлен:
22.03.2016
Размер:
743.26 Кб
Скачать

Общий случай описания класса

Пример

class A:

var = 1 # простой аттрибут lst = [1,2,3] # список

def foo(self,var): # метод класса pass

Общий случай описания класса

Пример

class A:

var = 1 # простой аттрибут lst = [1,2,3] # список

def foo(self,var): # метод класса pass

Пример использования

>>> A.lst

# атрибут класса

[1,

2,

3]

 

>>> a = A()

# создание объекта

>>> a.lst

# атрибут объекта

[1,

2,

3]

 

>>> a.foo('b')

# вызов метода

 

Изменение класса

Пример

 

class A:

# пустой класс

pass

 

def myMethod(self, x): # просто функция

return x * x

 

A.m1 = myMethod

# создание метода "на лету"

A.attr1 = 2 * 2

 

 

Изменение класса

Пример

 

class A:

# пустой класс

pass

 

def myMethod(self, x): # просто функция

return x * x

 

A.m1 = myMethod

# создание метода "на лету"

A.attr1 = 2 * 2

 

Пример использования

>>>a = A()

>>>a.m1(2)

4

>>>def foo(self,x):

... return x ** x

>>>A.m2 = foo

>>>a.m2(3)

27

Конструктор и деструктор

Пример

class A:

def __init__(self):

print "Создается объект" def __del__(self):

print "Уничтожается объект"

>>>a=A() Создается объект

>>>del a Уничтожается объект

Инкапсуляция и доступ к свойствам

Пример

class A(object): def getx(self):

print "получение x" return self._x

def setx(self,x): print "запись x" self._x = x

def delx(self): print "удаление x" del self._x

x = property(getx, setx, delx, "Свойство x")

>>>a.x=1 запись x

>>>a.x получение x 1

>>>del a.x удаление x

Полиморфизм

Пример

class

A(object):

#

предок

def f(self):

 

 

print "pac"

 

 

class

B(A):

#

потомок

def f(self): print "dva"

super(B,self).f() # доступ к методам предка

>>>b=B()

>>>b.f()

dva pac

Полиморфизм

Изменяя атрибут __class__, можно перемещать объект вверх или вниз по иерархии наследования:

Пример

>>>b=B()

>>>b.f()

dva pac

>>>b.__class__ = A

>>>

b.f()

# теперь b --- объект класса A

pac

 

 

Однако, в этом случае никакие преобразования типов не делаются, поэтому забота о согласованности данных всецело лежит на программисте.

Имитация встроенных типов

Имитация функции:

Пример

>>> class Add:

...

def __call__(self, x, y):

...

return x + y

...

>>>add = Add()

>>>add(3, 4)

7

#определение метода,

#который отвечает за операцию

#вызова функции

#это эквивалентно add.__call__(3, 4)

Сериализация

Следующий пример показывает как работает сериализация-десериализация с использованием pickle:

Пример

>>>import pickle

>>>p = set([1, 2, 3, 5, 8])

>>> pickle.dumps(p) # сериализация 'c__builtin__\nset\np0\n((lp1\nI8\naI1\naI2\naI3\naI5\natp2\nRp3\n.'

>>>import pickle

>>>p = # де-сериализация pickle.loads( \

'c__builtin__\nset\np0\n((lp1\nI8\naI1\naI2\naI3\naI5\natp2\nRp3\n.' \

)

>>>print p

set([8, 1, 2, 3, 5])

Получаемая при сериализации строка может быть передана по сети, записана в файл или специальное хранилище объектов, а позже прочитана.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]