Найти - Пользователи
Полная версия: Классы в Python
Начало » Python для новичков » Классы в Python
1 2
Alala
Изучаю питон и никак в голове не укладываются классы Python.

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

>>> a = 1

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

+ ситуация, вот такая:
if (a==b) :
john.name = "ABC"
else:
pass

print(john.name)
Получается в половине случаев будем получать эксешен?
Carzil
Да. Только pass должен быть с отступом.
cutwater
И скобки в if лишние.

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

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

if False:
a = 0
print a
Alala
Получается в половине случаев будем получать эксешен?
Yep, каждым инструментом нужно пользоваться с осторожностью. Обычно таких ситуаций, если они явно не предусмотрены в дизайне класса, можно избегать.
Enchantner
Какая прелесть, девушки взялись за Python. Поддерживаю! :)
cutwater
Enchantner
Какая прелесть, девушки взялись за Python. Поддерживаю! smile
Любопытно, как Вы определяете гендерную принадлежность ТС?
Yurietc
Alala
Раньше с классами я общалась
:)
может здесь что-то интересное найдете http://edupython.objectis.net/class_diff ?
Enchantner
cutwater
по окончаниям глаголов ;)
cutwater
Enchantner
по окончаниям глаголов wink
Старею.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB