python類中成員的調用
python類中的方法到底到底是方法還是函數取絕于調用者,
當類名調用這個方法時他是一個函數
class Foo(object):
def f1(self):
print("hello beijing")
def f2(self):
print("hello china")
def f3(self):
print("hello world")
obj1=Foo()
Foo.f1(obj1) #當以類名調用時,他是一個函數,但是
print(Foo.f1(obj1)) #需要自己傳值
obj2=Foo()
obj2.f2() #當以執行個體調用時他是一個方法,這個用的
print(obj2.f2()) #不用多解釋
關于這個知識點最主要的應用在反射中展現的比較重要
如下
class Foo(object):
def f1(self):
print("hello beijing")
def f2(self):
print("hello china")
def f3(self):
print("hello world")
obj2=Foo()
func_or_val = getattr(Foo,"f1") #這個相當于執行了Foo.f1,上面講過,這 個要手動傳參的
print(func_or_val)
print(func_or_val(obj2))
obj2=Foo()
func_or_val = getattr(obj2,"f1") #這個相當于執行了obj2.f1 ,當他是一個方法的時候不需要傳參
print(func_or_val)
print(func_or_val())
類中成員的調用和反射的最終結合
class Handler:
f0 = 9
def f1(self):
print('F1--001')
def f2(self):
print('F2--002')
def f3(self):
print('F3--003')
def f4(self):
print('F4--004')
def f5(self):
print('F5--005')
while True:
print("""
系統支援的函數有:
1. f1
2. f2
3. f3
4. f4
5. f5
""")
val = input("請輸入要執行的函數:")
func_or_val = getattr(Handler, val)
print(func_or_val) #這個相當于Handler.f1,在這裡f1是個函數,前面說過,後面是要自己傳參數的
obj=Handler()
print(func_or_val(obj)) #傳的參數是執行個體
print(func_or_val(Handler())) #這兩個寫法是一樣的
#這麼做最厲害的是可以動态的調用類中的方法了,想調用哪個都可以
轉載于:https://www.cnblogs.com/zhuhaofeng/p/9561450.html