python Class:オブジェクト向けの高度なプログラミング_call__& callable()
公式サイトの説明:
3.4.5. Emulating callable objects Called when the instance is “called” as a function; if this method is defined,
読めますが、読めません...硬伤ですね...
この2,3日文を出すのはいつも审査されて、理解できなくて、私が廖某のフルネームを出して人が不快ではありませんか???
よりよく理解するために、廖某の__を引用した.call__プログラムと自分の_repr__/__str__プログラムの比較:
実行結果:
うん、どうしてStudent 1がこんな出力するの??
もう一つの方法を変えます:プログラムClassはすべて変えていないで、ただ文を出力して変えました(マーク:#####)
実行結果:
まあ、やっぱり、考えてみれば、この出力の書き方は前のものと等価だから...そこで私は、もし__call__自分の関数を呼び出すなら、関数を使えばいい..末尾に()?!
再試行:廖の出力文のみ変更(マーク:####)
実行結果:
叩きますか、本当に関数ですね...
こんなにたくさん叩いても、隠しても普通だから、普通のものに変えればわかる.
実行結果:
属性を表示するには()番号を付けないので、メソッド(関数)を使用する場合に必要です.
なぜ運転の最後にNoneがあるのですか?
Because,
dog.run()はprintを1回実行しましたが、
そして
もう一度実行したので、このprintはNoneを出力するしかありません.
私は本当に頭がいいですね.ハハハハ.
callable:オブジェクトが呼び出せるかどうか、すなわち関数かどうかを表示します.
実行結果:
3.4.5. Emulating callable objects
object.
__call__
(self[, args...]) x(arg1, arg2, ...)
is a shorthand for x.__call__(arg1,arg2, ...)
. 読めますが、読めません...硬伤ですね...
この2,3日文を出すのはいつも审査されて、理解できなくて、私が廖某のフルネームを出して人が不快ではありませんか???
よりよく理解するために、廖某の__を引用した.call__プログラムと自分の_repr__/__str__プログラムの比較:
# :__call__ name
class Student1(object):
def __init__(self, name):
self.name = name
def __call__(self):
print('My name is %s.' % self.name)
h = Student1('MumU')
print 'liao:', h
# :__repr__ / __str__ name
class Student2(object):
def __init__(self, name):
self.name = name
def __str__(self):
return 'Student2 name:%s'%self.name
__repr__ = __str__
l = Student2('U')
print 'me:', l
実行結果:
liao: <__main__.student1>
me: Student2 name:U
うん、どうしてStudent 1がこんな出力するの??
もう一つの方法を変えます:プログラムClassはすべて変えていないで、ただ文を出力して変えました(マーク:#####)
# :__call__ name
class Student1(object):
def __init__(self, name):
self.name = name
def __call__(self):
print('My name is %s.' % self.name)
print Student1('MumU') ####
# :__repr__ / __str__ name
class Student2(object):
def __init__(self, name):
self.name = name
def __str__(self):
return 'Student2 name:%s'%self.name
__repr__ = __str__
print Student2('U') ####
実行結果:
liao: <__main__.student1>
me: Student2 name:U
まあ、やっぱり、考えてみれば、この出力の書き方は前のものと等価だから...そこで私は、もし__call__自分の関数を呼び出すなら、関数を使えばいい..末尾に()?!
再試行:廖の出力文のみ変更(マーク:####)
# :__call__ name
class Student1(object):
def __init__(self, name):
self.name = name
def __call__(self):
print('My name is %s.' % self.name)
print Student1('MumU')() ####
# :__repr__ / __str__ name
class Student2(object):
def __init__(self, name):
self.name = name
def __str__(self):
return 'Student2 name:%s'%self.name
__repr__ = __str__
print Student2('U')
実行結果:
liao: My name is MumU.
None
me: Student2 name:U
叩きますか、本当に関数ですね...
こんなにたくさん叩いても、隠しても普通だから、普通のものに変えればわかる.
class Animal(object):
def __init__(self, name):
self.name = name
def run(self):
print '%s is running'%self.name
dog = Animal('dog')
print ' class name :', dog.name
print ' class ( ) :', dog.run()
実行結果:
class name : dog
class ( ) : dog is running
None
属性を表示するには()番号を付けないので、メソッド(関数)を使用する場合に必要です.
なぜ運転の最後にNoneがあるのですか?
Because,
dog.run()はprintを1回実行しましたが、
def run(self):
print '%s is running'%self.name
そして
print ' class ( ) :', dog.run()
もう一度実行したので、このprintはNoneを出力するしかありません.
私は本当に頭がいいですね.ハハハハ.
callable:オブジェクトが呼び出せるかどうか、すなわち関数かどうかを表示します.
print 'Student1 ??', callable(Student1('MumU'))
print 'Student2 ??', callable(Student2('U'))
実行結果:
Student1 ?? True
Student2 ?? False