#!/usr/bin/python
# -*- coding: utf-8 -*-
# @Time : 2021/1/29 11:59
# @Author : Lee
# @File : p.py
class Foo():
country = 'China'
def func(self):
pass
v = getattr(Foo, 'func') # 根据字符串为参数(第二个参数),去类(第一个参数)中寻找与之同名的成员
print(v) #是函数 因为第一个参数是类名 打印<function Foo.func at 0x000001C4CE312378>
obj = Foo() # 是方法 因为是对象
v = getattr(obj, 'func')
print(v) # 方法 打印<bound method Foo.func of <__main__.Foo object at 0x000001C4CE325B70>>
class Acount():
# def __init__(self):
# self.func_list = ['login', 'logout', 'register']
func_list = ['login', 'logout', 'register']
def login(self):
print('登录了')
def logout(self):
print('注销了')
def register(self):
print('注册了')
def run(self):
print("""
请输入要执行的:
1: 登录
2: 注销
3: 注册
""")
choice = int(input('请输入你的执行数字:'))
func_name = Acount.func_list[choice - 1]
f = getattr(self, func_name) # 这个是方法 因为第一个参数是对象,如果有N个对象的话,直接写死了不对,所以写一个self
# 那么obj对象就可以是self.因为如果打印对象和self的时候 他们都是一个含义
f()
# f = getattr(Acount, func_name) # 这个是函数 因为第一个参数是类名,那么函数调用就得需要() 括号里面有self参数
# # 就得进行传参 ,理论上可以是任意值,咱们把对象传进去
# f(obj)
obj = Acount()
obj.run()
注: 模仿路飞学城顶级教师武沛齐先生的代码