• 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()))   #这两个写法是一样的
    
        #这么做最厉害的是可以动态的调用类中的方法了,想调用哪个都可以
  • 相关阅读:
    数学+高精度 ZOJ 2313 Chinese Girls' Amusement
    最短路(Bellman_Ford) POJ 1860 Currency Exchange
    贪心 Gym 100502E Opening Ceremony
    概率 Gym 100502D Dice Game
    判断 Gym 100502K Train Passengers
    BFS POJ 3278 Catch That Cow
    DFS POJ 2362 Square
    DFS ZOJ 1002/HDOJ 1045 Fire Net
    组合数学(全排列)+DFS CSU 1563 Lexicography
    stack UVA 442 Matrix Chain Multiplication
  • 原文地址:https://www.cnblogs.com/zhuhaofeng/p/9561450.html
Copyright © 2020-2023  润新知