2015-03-16 3 views
-2

Зачем мне передавать тексты для x для печати как 4, но не для двух строк? Я, наконец, понимаю параметры и способы их удовлетворения, но я не понимаю, почему мне приходится передавать тексты для x для печати как нечто иное, чем адрес памяти, в отличие от быков_до_парад и happy_bday.Больше путаницы с ООП в Python

class Song(): 

    def __init__(self, lyrics, x): 
     self.lyrics = lyrics 
     #self.x = x 

    def sing_me_a_song(self): 
     for line in self.lyrics: 
      print line 

    def print_x(self): 
     print x.lyrics 

happy_bday = Song(["Happy birthday to you,", 
       "I don't want to get sued", 
       "So I'll stop right there"], 'x-value') 

bulls_on_parade = Song(["They'll rally around the family", 
        "With pockets full of shells"], 'x-value') 

happy_bday.sing_me_a_song() 

bulls_on_parade.sing_me_a_song() 

def lyrics(args): 
    pass 

x = Song(lyrics= 4, x = lyrics) 

x.print_x() 
+8

Вы имеете в виду глобальную переменную "х" в "print_x". Это, вероятно, не то, что вы хотите. Но помимо этого я понятия не имею, что вы хотите. – deets

ответ

2

В этом фрагменте кода можно определить глобальное имя lyrics быть функцией. Передача lyrics как x = lyrics в конструктор объекта для x передаст ему адрес функции (это не совсем так, но сейчас это будет делать) в качестве значения для параметра x.

lyrics = 4 отличается тем, что Python различает имена аргументов вызова функций и имена переменных.

def lyrics(args): 
    pass 

x = Song(lyrics= 4, x = lyrics) 

В самом деле, если в вашем коде вы это делаете:

x = Song(lyrics=lyrics) 
print x.lyrics 

Вы увидите что-то вроде этого:

<function lyrics at 0x107b9d1b8> 
Смежные вопросы