天天看點

python類中成員的的調用

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