2010-12-03 4 views
0

Я новичок в использовании классов, и я пытаюсь передать переменную одному из методов внутри моего класса. Как мне это сделать?Передача переменной методу в классе

Вот пример того, что я пытаюсь выполнить:

class a_class(): 
    def a_method(txt): 
      print txt 

instance = a_class() 
instance.a_method('hello world!) 

P.S. Я пока не понимаю все концепции и __blah__, и я избегу их в этот момент, если мне не придется их использовать.

+7

Вы не можете избежать их. Вам нужно понять «себя», иначе вы никогда не получите ничего, чтобы работать. Какой учебник вы используете? Возможно, мы порекомендуем лучшее. – 2010-12-03 17:52:26

ответ

5

При написании метода экземпляра для класса в Python-, который выглядит точно так же как то, что вы только закодированный вверх - вы не можете избежать использования self. Первым параметром метода экземпляра в Python всегда является объект, на который вызывается метод. self - это не зарезервированное слово в Python - просто традиционное имя для этого первого параметра.

Цитата из official Python tutorial, chapter 9:

[...] специальная вещь о методах является то, что объект передается в качестве первого аргумента функции. В нашем примере вызов x.f() в точности эквивалентен MyClass.f (x). В общем случае вызов метода со списком n аргументов эквивалентен вызову соответствующей функции с помощью списка аргументов, который создается путем вставки объекта метода перед первым аргументом.

Таким образом, для вашего метода вам необходимо указать два параметра. Первое всегда - self - по крайней мере, это обычное имя, а второе - ваш фактический параметр. Таким образом, ваш фрагмент кода должен быть:

class a_class(object): 
    def a_method(self, txt): 
     print txt 

instance = a_class() 
instance.a_method('hello world!') 

Обратите внимание, что класс явно наследует от объекта (я не уверен, что пустые скобки есть юридические). Вы также можете не предоставлять наследование, которое идентично для целей большинства, но отличается некоторыми деталями поведения системы типов; наследование от object определяет класс a_class как класс нового стиля, а не класс старого стиля, что не имеет отношения к большинству целей, но, вероятно, стоит осознавать.

4

Вы должны иметь

class a_class(): 
    def a_method(self,txt): 
     print txt 

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

0

Концепция self и использование __init__ действительно не так запутанны, и очень важно написать хороший код Python. __init__ вызывается при создании экземпляра класса и просто включает параметр self в каждом методе класса, затем вы можете использовать self для ссылки на экземпляр класса.

class a_class(): 
    def __init__(self): 
     self.count = 0 

    def a_method(self, txt): 
     self.count += 1 
     print str(self.count), txt 

instance = a_class() 
instance.a_method('hello world!') 
# prints "1 hello world!" 
instance.a_method('hello again!') 
# prints "2 hello again!" 
2

Методы экземпляров на Python должны быть предоставлены экземпляр (заданный как self) в качестве первого параметра в сигнатуре метода.

class a_class(): 
    def a_method(self,txt): 
      print txt 

Это должно быть то, что вы ищете. Кроме того, если вы должны были взаимодействовать с переменной-члена вы хотите сделать что-то вроде этого:

class a_class(): 
    name = "example" 
    def a_method(self,txt): 
      print txt 
      print self.name 
+0

Чтобы уточнить, вы все еще называете метод, каким вы были раньше: instance.a_method ('hello world!') – 01001111 2010-12-03 17:52:04

+0

В вашем втором примере `name` является ** не ** переменной member/instance! Это переменная класса. -1 – delnan 2010-12-03 17:56:56

Смежные вопросы