Форум сайта python.su
0
Как я понял следующая строка – конструктор
def __init__(self):
class Test: def __init__(self): def SayHello(name): print ('Hello, {0}!').format(name) tst = Test() tst.SayHello('Dima')
Офлайн
221
Suliman
все ваши вопросы в этом сообщении говорят что вы лишь отдаленно имеете понятие о классах. Выберите правильный подход - изучите специализированную литературу. (а то получается без букваря слова читать пытаетесь). Это мой вам совет.
0) Так или иначе у класса всегда есть базовый конструктор, он делает всю внутреннюю работу . Если вы для вашего класса ничего не указываете - выполняется только он и ничего более.
1) нет, функция, насколько я вас понимаю, должна быть методом класса. В таком случае она должна быть на 1 внутреннем уровне вложенности (как в вашем коде конструктор) …
2)…. и принимать первым аргументом ссылку на экземпляр класса, т.е. в вашем случае self,names где self это ссылка, а name параметр метода
3) скорее всего никак, на то она и вложенная.
class Test: def __init__(self): value=1 # как правило здесь указывают инициализирующий код def SayHello(self, name): print ('Hello, {0}!').format(name) tst = Test() tst.SayHello('Dima')
Офлайн
857
Sulimanнет, конструктор создаёт экземпляр класса, а __init__ вызывается у уже созданного экземпляра, конструктор - это __new__
Как я понял следующая строка – конструктор
Sulimanон будет пустым (унаследован сверху)
Что будет если его не объявлять?
>>> class A: ... pass ... >>> a = A() >>> a.__init__ <method-wrapper '__init__' of A object at 0xb732cd6c> >>>
Sulimanполучилась локальная функция - типа локальной переменной, которая создаётся при каждом вызове метода __init__ и разрушается при его завершении
1. Правильно ли я сделал что определил функцию SayHello внутри
Sulimanво все методы класса передаётся ссылка на экземпляр, которому принадлежит метод
я не могу понять что мне передавать
>>> class A: ... pass ... >>> a = A()
Отредактировано py.user.next (Апрель 23, 2014 23:15:35)
Офлайн
0
py.user.nextА метод этот вызывается при каждом создании класса, так? Т.е. при каждом создание класса я получаю возможность использовать этот метод?
получилась локальная функция - типа локальной переменной, которая создаётся при каждом вызове метода __init__ и разрушается при его завершении
Офлайн
857
Sulimanпри создании экземпляра метод __init__ вызывается у уже созданного экземпляра
А метод этот вызывается при каждом создании класса, так?
Sulimanон сам вызывается
Т.е. при каждом создание класса я получаю возможность использовать этот метод?
>>> class A: ... __init__ = lambda self: None ... >>> a = A() >>> a.__init__ <bound method A.<lambda> of <__main__.A object at 0xb73ace2c>> >>> id(a) 3074084396 >>>
>>> class A: ... __new__ = lambda cls: None ... __init__ = lambda self: None ... >>> a = A() >>> type(a) <class 'NoneType'> >>>
Офлайн