Занятие 7. Классы. ФББ МГУ имени М.В.Ломоносова 2013 год 19 октября

advertisement
Занятие 7. Классы.
18-19 октября
ФББ МГУ имени М.В.Ломоносова
2013 год
"Простые" объекты
Строчку текста можно сохранить в
переменной типа str и потом
делать с ней простейшие
действия:
• записать несколько раз подряд;
• дописать к ней другие строчки;
• убрать определенные символы
с конца и начала;
• вывести строку на экран
и т.д. и т.п.
a =
b =
foo
foo
e =
1
"ABCD"
"EEEE"
= 3 * a
= a + b + "
"
foo.strip(" ")
print e
Но что делать, если нужно сохранить в памяти
информацию о более сложном объекте и потом
работать с ним?!
…например, белок
id_RefSeq = "YP_00000001.1"
description = "hypothetical protein"
sequence = "MAYRTFGTYHYTR..."
3 переменные, и ни в одной из них не хранится
информация о белке как таковом: только все
вместе они описывают белок
2
Жизнь без классов
Цель: сохранить данные о
конкретной кошке в памяти

Кошка:
Имя
Возраст
Длина хвоста
Способ 1А: переменные
cat_name = "Kitty"
cat_age = 1.5
cat_tale_len = 10
Переменные, по сути хранящие
части информации о чем-то
одном, разнесены (и в коде, и
логически); есть возраст, имя и
длина, а кошки-то и нету!

Способ 1Б: список
x = ("Kitty", 1.5, 10)
cat_age = x[1]
Нужно всегда помнить, под
каким номером в списке
хранится что. Легко перепутать
возраст с длиной хвоста.
3
Класс
Кошка:
Цель: сохранить данные о
конкретной кошке в памяти

4
Имя
Возраст
Длина хвоста
Способ 2: задание класса
двоеточие
class Cat:
name = "Noname"
отступ
age = 0
tale_len = 0
1) В одном месте кода ясно
прописано, какие свойства
задают кошку; это легко
изменить, если понадобится
обращение к
x = Cat() свойству класса
x.name = "Kitty"
x.age = 1.5
x.tale_len = 10
2) В переменной теперь сохраняется
реальный объект, к свойствам которого,
прописанным выше, можно обратиться
Методы класса
Кошка:
Имя
Возраст
Длина хвоста
+ умение
сообщать свое
имя на экран
class Cat:
name = "Noname"
по
age = 0
умолчанию
tale_len = 0
def miau(self):
print "Miaaaoooo!"
print "My name is %s" % self.name
x = Cat() x – конкретный экземпляр (объект) класса
x.name = "Kitty"
Тонкость: первый аргумент функции,
принадлежащей классу – всегда тот объект,
x.age = 1.5
который ее вызвал; через него можно
x.tale_len = 10 обращаться к свойствам этого объекта. Но при
вызове функции это не указывается!
x.miau()
5
6
Словарик
Имя класса
class Cat:
переменные-члены класса
name = "Noname"
(data members)
age = 0
или
свойства класса (class attributes)
tale_len = 0
def miau(self):
print "Miaaaoooo!"
print "My name is %s" % self.name
В переменной x сохранен новый
объект, экземпляр (instance) класса
x = Cat()
x.miau()
Вызов функции класса данным
объектом
Функция miau() прописана выше.
А где функция Cat()?!
функция-член
класса
(member function)
или
метод класса
(class method)
Инициализирующая функция
class Cat:
name = "Noname"
age = 0
tale_len = 0
def miau(self):
print "Miaaaoooo!"
print "My name is %s" % self.name
def __init__(self, n, a, t):
Вызывается,
self.name = n
когда мы пишем
self.age = a
x = Cat()
self.tale_len = t
x = Cat("Kitty", 1.5, 10)
x.miau()
7
Download