Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 26, 2012 14:07:30

vault
Зарегистрирован: 2012-06-21
Сообщения: 52
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос про классы.

Ясно, спасибо. То есть чтобы определить аттрибуты непосредственно для объекта, это нужно делать во внутреннем методе через self. Извините за тупление

Офлайн

#2 Июнь 26, 2012 14:14:25

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вопрос про классы.

vault
это нужно делать во внутреннем методе через self.
Ты удивишься
class Foo():
  def __init__(cheburashka):
    cheburashka.a=34
f=Foo()
print f.a



Офлайн

#3 Июнь 26, 2012 14:50:25

vault
Зарегистрирован: 2012-06-21
Сообщения: 52
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос про классы.

FishHook
class Foo():
def __init__(cheburashka):
cheburashka.a=34
f=Foo()
print f.a

Ну, попрошу не ерничать - под self-ом я подразумеваю аргумент, который передается в методы в качестве ссылки на объект, хозяина метода. А под cls-ом выше я понимал ссылку на класс. Вроде, насколько я понимаю, это вполне общие обозначения и терминология.

Офлайн

#4 Июнь 26, 2012 23:54:36

vault
Зарегистрирован: 2012-06-21
Сообщения: 52
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос про классы.

Снова вопрос возник:

class A:
    def __init__( self ):
        self.__value = 1
    def getvalue( self ):
        return self.__value
class B( A ):
    def __init__( self ):
        A.__init__( self )
        self.__value = 2
 
b = B()
print b.getvalue()
print b._B__value

Выводит:
1
2
Почему здесь getvalue возвращает _A__value, а не _B__value? Без подчеркивания, разумеется, все в порядке.

Офлайн

#5 Июнь 27, 2012 17:13:01

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Вопрос про классы.

vault
Покопался с метаклассами, ужаснулся, впечатлился. Статьи отличные, спасибо.
Но возник вопрос: а зачем тут, в принципе, метаклассы? Собственно, ковыряя и переиначивая решение, достиг нужного результата проще:

class Reg(object):
_instances =
def __init__(self):
self._instances.append(self)
def __iter__(self):
return iter(_instances)

Боюсь, нужного результаты вы не достигли.



Офлайн

#6 Июнь 27, 2012 17:53:23

vault
Зарегистрирован: 2012-06-21
Сообщения: 52
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос про классы.

fata1ex
Боюсь, нужного результаты вы не достигли.

Тест, приведенный в статье, был пройден вроде.

Офлайн

#7 Июнь 27, 2012 19:48:04

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Вопрос про классы.

>>> class Reg(object):
...     _instances = []
...     def __init__(self):
...         self._instances.append(self)
...     def __iter__(self):
...         return iter(self._instances)
...         
>>> a, b, c = Reg(), Reg(), Reg()
>>> for obj in Reg:
...     print obj
...     
... 
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: 'type' object is not iterable



Отредактировано fata1ex (Июнь 27, 2012 20:14:10)

Офлайн

#8 Июнь 27, 2012 19:57:30

vault
Зарегистрирован: 2012-06-21
Сообщения: 52
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос про классы.

Да, что-то я напутал, видимо. Уже, честно говоря, не помню почему.

Офлайн

#9 Июнь 27, 2012 20:14:35

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Вопрос про классы.

>>> class Reg(object):
...     _instances = []
...     def __init__(self):
...         self._instances.append(self)
...     def __iter__(self):
...         return iter(self._instances)
...     
>>> a, b, c = Reg(), Reg(), Reg()
>>> for obj in Reg():
...     print obj
...     
<__main__.Reg object at 0x8fa3d4c>
<__main__.Reg object at 0x8fbbdcc>
<__main__.Reg object at 0x905bf2c>
<__main__.Reg object at 0x905becc>



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version