Форум сайта python.su
1
class Person: presentName = '' firstName = '' middleName = '' lastName = '' def __init__(self, name): self.presentName = name ... ... ... def getFirstName(self): return self.firstName def getLastName(self): return self.lastName ... ...
Отредактировано AxaRu (Апрель 20, 2015 22:17:12)
Офлайн
221
AxaRu
Вам нужно уяснить отличия объекта класса от его экземпляра - для этого нужно почитать в книгах раздел про классы и ООП.
Вот для пояснения пример:
class A(object): value='first' def __init__(self, value='default'): self.value=value def get_value(self): return self.value print A.value print A().value print A('second').value a=A('python') print a.__class__.value print a.get_value()
first default second first python
Офлайн
1
JOHN_16
Спасибо за ответ.,
Вот Вы мне мозг взорвали
. До сих пор я думал, что объект класса и экземпляр класса - синонимы. В том смысле, что объект является экземпляром класса.
В вашем примере создаются 4 объекта(экземпляра) класса А
1.
print A.value
print A().value print A('second').value
a=A('python') print a.__class__.value print a.get_value()
Отредактировано AxaRu (Апрель 21, 2015 04:38:07)
Офлайн
857
Вместо функций для чтения/записи атрибута можно сделать свойство.
>>> class Person: ... ... _name = None ... ... @property ... def name(self): ... return self._name ... ... @name.setter ... def name(self, s): ... self._name = s ... >>> p = Person() >>> p.name = 'name 1' >>> p.name 'name 1' >>> p.name = 'name 2' >>> p.name 'name 2' >>>
AxaRuНе всегда класс и программу, которая его использует, разрабатывает один человек. Поэтому они, не зная друг о друге, могут менять свои коды как угодно.
Так принято в Python, или это моветон, и нужно обращаться напрямую к значениям?
Отредактировано py.user.next (Апрель 21, 2015 04:47:08)
Офлайн
221
AxaRu
не совсем, в первом случае это не объект экземпляра класса, а сам объект класса. Обратите внимание что там A, а не A().
AxaRuНе совсем, скорее потому что все в Питоне это объект в концептуальном смысле. Класс,функция, число,строка имеет одну природу - объект.
это идеологическая “фишка” Python возникшая из-за того, что собственно Python интерпретатор.
AxaRuВ целом да, за исключением специального объекта _ в интерактивном режиме, который хранит в себе предыдущий объект который был возвращен в консоль:
Два других объекта - экземпляра класса А никакой переменной не присваиваются и дальше сослаться на них будет не возможно.
>>> class A(object): pass ... >>> A() <__main__.A object at 0x00F49030> >>> print _ <__main__.A object at 0x00F49030> >>> 'qwerty' 'qwerty' >>> print _ qwerty
AxaRuПравильно. Но внутри экземпляра класса a есть спец аттрибут который ссылается на объект породивший экземпляр - на объект класса A
А здесь создается объект - экземпляр а класса А
Офлайн
1
py.user.next
спасибо за то что указал на свойство языка (@property, @name.setter) при описании доступа к данным объекта. Я в книге у Лутца этого не видел.
JOHN_16
Спасибо за то что заставил задуматься и поразмышлять об ООП.
Офлайн