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