Python связывает тип с переменной - PullRequest
1 голос
/ 14 апреля 2010

Я нуб Питон.

Я создаю класс следующим образом:

class t1:
    x = ''
    def __init__(self, x):
        self.x = x

class t2:
    y = ''
    z = ''
    def __init__(self, x, y, z):
        self.y = t1.__init__(x)
        self.z = z

Теперь, в отличие от C ++ или Java, я не связываю тип данных с y при написании определения класса. Только потому, что код конструктора таков, что он показывает, что y имеет тип t1. Можем ли мы связать тип данных при объявлении y?

Ответы [ 2 ]

6 голосов
/ 14 апреля 2010

Нет. Переменные в Python не имеют типов - y не имеет типа. В любой момент времени y относится к объекту, и этот объект имеет тип. Это:

y = ''

связывает y с объектом типа str. Вы можете изменить его позже, чтобы ссылаться на объект другого типа. y сам по себе не имеет собственного типа.

См. Отличная статья Фредрика Лунда "Перезагрузите свой мозг" для дальнейшего объяснения.

(Кстати, это: self.y = t1.__init__(x) - довольно странный кусок кода. Вы хотели сказать self.y = t1(x)?)

3 голосов
/ 14 апреля 2010

Это выходит за рамки, но обратите внимание:

class A(object):
    x = None

В этом контексте x является переменной класса, а не переменной экземпляра и используется каждым экземпляром. Обычно используется в шаблоне borg .

class A(object):
    def __init__(self, x):
        self.y = None
        self.x = x

Здесь self.y и self.x являются переменными экземпляра.

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