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())) #这两个写法是一样的 #这么做最厉害的是可以动态的调用类中的方法了,想调用哪个都可以