питон само-менее - PullRequest
       8

питон само-менее

2 голосов
/ 20 апреля 2011

это работает желаемым образом:

class d:
    def __init__(self,arg):
        self.a = arg
    def p(self):
        print "a= ",self.a

x = d(1)
y = d(2)
x.p()
y.p()

получая

a=  1
a=  2

я попытался удалить "self" и использовать глобальный оператор в __init__

class d:
    def __init__(self,arg):
        global a
        a = arg
    def p(self):
        print "a= ",a

x = d(1)
y = d(2)
x.p()
y.p()

уступая, нежелательно:

a=  2
a=  2

есть ли способ написать это без необходимости использовать "self"?

Ответы [ 3 ]

6 голосов
/ 20 апреля 2011

«Я» - это способ работы Python. Итак, ответ: нет! Если вы хотите подстричься: вам не нужно использовать «я». Подойдет и любое другое имя. ;-)

4 голосов
/ 20 апреля 2011

Методы Python - это просто функции, которые связаны с классом или экземпляром класса.Единственное отличие состоит в том, что метод (он же связанная функция) ожидает объект экземпляра в качестве первого аргумента.Кроме того, когда вы вызываете метод из экземпляра, он автоматически передает экземпляр в качестве первого аргумента.Итак, определяя self в методе, вы указываете ему пространство имен для работы.

Таким образом, когда вы указываете self.a, метод знает, что вы изменяете переменную экземпляра a, которая является частью пространства имен экземпляра.

Область видимости Python работает изнутри, поэтому каждая функция (или метод) имеет свое собственное пространство имен.Если вы создаете переменную a локально в методе p (эти имена сосут, кстати), она отличается от переменной self.a.Пример использования вашего кода:

class d:
    def __init__(self,arg):
        self.a = arg
    def p(self):
        a = self.a - 99
        print "my a= ", a
        print "instance a= ",self.a


x = d(1)
y = d(2)
x.p()
y.p()

Что дает:

my a=  -98
instance a=  1
my a=  -97
instance a=  2

Наконец, вам не нужно вызывать первую переменную self.Вы можете называть это как хотите, хотя на самом деле не должны.Условно определять и ссылаться на self изнутри методов, поэтому, если вам все равно, что другие люди читают ваш код, не желая вас убивать, придерживайтесь соглашения!

Дальнейшее чтение:

0 голосов
/ 20 апреля 2011

Когда вы удаляете свои собственные, вы в конечном итоге получаете только одну переменную с именем a, которая будет использоваться не только всеми вашими d объектами, но и всей вашей средой исполнения.По этой причине вы не можете просто уничтожить себя.

...