Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 24, 2011 18:50:49

Alala
От:
Зарегистрирован: 2011-07-14
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Классы в Python

Изучаю питон и никак в голове не укладываются классы Python.

Вот пример кода

>>> class Employee:
... pass
...
>>> john = Employee()
>>> john.name = "AAA"
>>> john.name
'AAA'
>>>
Почему?! Почему такое вообще работает? Почему можно писать john.name, нигде же не объявлена эта переменная в классе.
Раньше с классами я общалась только в контексте С++, поэтому такие конструкции выносят мозг.
Может кто-то объяснить? Или может есть какие-нибудь статьи где проводятся параллели/сравнения с другими языками?



Офлайн

#2 Авг. 24, 2011 19:50:00

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Классы в Python

По той же причине, по которой работает

>>> a = 1

Ведь переменная a нигде не объявлена.
Аттрибут класса создается так же в момент присваивания ему значения.



Офлайн

#3 Авг. 24, 2011 23:43:01

Alala
От:
Зарегистрирован: 2011-07-14
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Классы в Python

Ммм, тут разница
когда просто объявляем переменную, а тут мы объявляем ее внутри уже существующего объекта. Внутри класса.
Я как-то не очень вижу смысл этого.

+ ситуация, вот такая:

if (a==b) :
john.name = "ABC"
else:
pass

print(john.name)
Получается в половине случаев будем получать эксешен?



Офлайн

#4 Авг. 25, 2011 00:09:56

Carzil
От:
Зарегистрирован: 2010-05-26
Сообщения: 106
Репутация: +  0  -
Профиль   Отправить e-mail  

Классы в Python

Да. Только pass должен быть с отступом.



Офлайн

#5 Авг. 25, 2011 00:28:19

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Классы в Python

И скобки в if лишние.

Alala
когда просто объявляем переменную, а тут мы объявляем ее внутри уже существующего объекта. Внутри класса.
Я бы посоветовал Вам рассматривать объекты классов как некий словарь, который может изменяться в процессе выполнения. Питон это динамичный язык.

Alala
Получается в половине случаев будем получать эксешен?
Точно так же, как и если бы Вы обратились к несуществующей переменной
Например

if False:
a = 0
print a
Alala
Получается в половине случаев будем получать эксешен?
Yep, каждым инструментом нужно пользоваться с осторожностью. Обычно таких ситуаций, если они явно не предусмотрены в дизайне класса, можно избегать.



Отредактировано (Авг. 25, 2011 00:32:41)

Офлайн

#6 Авг. 25, 2011 14:51:42

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

Классы в Python

Какая прелесть, девушки взялись за Python. Поддерживаю! :)



Офлайн

#7 Авг. 25, 2011 16:03:38

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Классы в Python

Enchantner
Какая прелесть, девушки взялись за Python. Поддерживаю! smile
Любопытно, как Вы определяете гендерную принадлежность ТС?



Офлайн

#8 Авг. 25, 2011 19:04:31

Yurietc
От:
Зарегистрирован: 2007-07-18
Сообщения: 112
Репутация: +  0  -
Профиль   Отправить e-mail  

Классы в Python

Alala
Раньше с классами я общалась
:)
может здесь что-то интересное найдете http://edupython.objectis.net/class_diff ?



Офлайн

#9 Авг. 25, 2011 19:05:21

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

Классы в Python

cutwater
по окончаниям глаголов ;)



Офлайн

#10 Авг. 25, 2011 20:28:03

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Классы в Python

Enchantner
по окончаниям глаголов wink
Старею.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version