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