python: selfの不思議な世界。

def  greeting():
    return "Hello!!!!"

def  say(msg = greeting()):
    print msg

class Hoo:
  def greeting(self):
    return "See you!!!"
  def say(self,msg = None ):
    if msg is None:
        msg = self.greeting()
    print msg
  def say2(self,msg =self.greeting() ):
    print msg

say()
Hoo().say()
Hoo().say2()

hdknr@ubuntu-vbox:~$ python test.py
Traceback (most recent call last):
  File "test.py", line 7, in <module>
    class Hoo:
  File "test.py", line 14, in Hoo
    def say2(self,msg =self.greeting() ):
NameError: name ‘self’ is not defined

 

ef  greeting():
    return "Hello!!!!"

def  say(msg = greeting()):
    print msg

class Hoo:
  def greeting(self):
    return "See you!!!"
  def say(self,msg = None ):
    if msg is None:
        msg = self.greeting()
    print msg
  def say2(self,msg =greeting() ):
    print msg

say()
Hoo().say()
Hoo().say2()

hdknr@ubuntu-vbox:~$ python test.py
Traceback (most recent call last):
  File "test.py", line 7, in <module>
    class Hoo:
  File "test.py", line 14, in Hoo
    def say2(self,msg =greeting() ):
TypeError: greeting() takes exactly 1 argument (0 given)

 

def  greeting():
    return "Hello!!!!"

def  morning():
    return "Good Morning."

def  say(msg = greeting()):
    print msg

class Hoo:
  def greeting(self):
    return "See you!!!"
  def say(self,msg = None ):
    if msg is None:
        msg = self.greeting()
    print msg
  def say2(self,msg =morning() ):
    print msg

say()
Hoo().say()
Hoo().say2()

hdknr@ubuntu-vbox:~$ python test.py
Hello!!!!
See you!!!
Good Morning.

“self”が使えないのはインスタンスメソッドというのは実際はselfの無い関数オブジェクトをデコレートして、最初の引数にインスタンスを挿入して呼ぶから?よくわからん。

カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中