Найти - Пользователи
Полная версия: Вопрос про классы.
Начало » Python для новичков » Вопрос про классы.
1 2 3
vault
Ясно, спасибо. То есть чтобы определить аттрибуты непосредственно для объекта, это нужно делать во внутреннем методе через self. Извините за тупление
FishHook
vault
это нужно делать во внутреннем методе через self.
Ты удивишься
class Foo():
  def __init__(cheburashka):
    cheburashka.a=34
f=Foo()
print f.a
vault
FishHook
class Foo():
def __init__(cheburashka):
cheburashka.a=34
f=Foo()
print f.a

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

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? Без подчеркивания, разумеется, все в порядке.
fata1ex
vault
Покопался с метаклассами, ужаснулся, впечатлился. Статьи отличные, спасибо.
Но возник вопрос: а зачем тут, в принципе, метаклассы? Собственно, ковыряя и переиначивая решение, достиг нужного результата проще:

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

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

Тест, приведенный в статье, был пройден вроде.
fata1ex
>>> 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
vault
Да, что-то я напутал, видимо. Уже, честно говоря, не помню почему.
fata1ex
>>> 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>
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