почему мой код печатает только bbb один раз, и он неожиданно не работает неправильно - PullRequest
0 голосов
/ 26 декабря 2009
class a:
    class __b__(object):
        print 'bbb'

b=a()
b.__b__()
b.__b__()
b.__b__()
a.__b__()
a.__b__()
a.__b__()

печатает 'bbb' только один раз, спасибо

Ответы [ 3 ]

4 голосов
/ 26 декабря 2009

Когда python создает класс, он делает это, выполняя код в определении класса ровно один раз , создавая таким образом пространство имен класса и т. Д. *

Если вы хотите, чтобы он запускался при каждом вызове, вам нужно поместить свой код в метод __init__ (который является конструктором).

class a:
    class b:
        def __init__(self):
            print 'bbb'

a.b()
a.b()

Это напечатает bbb 2x. Обратите внимание, что вам не нужен экземпляр a() для доступа к a.b, потому что class b - это просто атрибут class a. Вы действительно мало что получаете, вкладывая классы в python.

Обратите внимание, я не использовал __b__, потому что python резервирует слова, которые начинаются и заканчиваются двойным подчеркиванием.

3 голосов
/ 26 декабря 2009

Вы не объясняете, что вы пытаетесь сделать, но я думаю, что вы имеете в виду:

class a:
    def __b__(object):
        print 'bbb'
2 голосов
/ 26 декабря 2009

Оператор class __b__ выполняется ровно один раз (когда выполняется оператор class a), и это единственный случай, когда вы print int. Различные экземпляры не имеют никакого отношения (ни один из них не имеет ничего общего с print ing).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...