print("running pre\_task")
def task():
print(“running task”)
def post_task():
print(“running post_task”)
cmdList = [“pre_task()”,“task()”,“post_task()”]
for cmd in cmdList:
eval(cmd) # 执行函数
running pre_task
running task
running post_task
### 4. getattr 函数
运行类中的静态方法
import sys
class Task:
@staticmethod
def pre_task():
print(“running pre_task”)
@staticmethod
def task():
print("running task")
@staticmethod
def post\_task():
print("running post\_task")
#⚠️ 没有括号的字符串。
cmdList = [“pre_task”, “task”, “post_task”]
task = Task()
for cmd in cmdList:
func = getattr(task, cmd)
func()
### 5. **dict** 方法
首先我们需要知道,每个python对象都有一个内置的`__dict__()`方法,这个方法返回一个字典,包含了对象的所有属性。
如下图,我们可以看到list的`__dict__()`方法返回的所有属性,其中红框内的,你是否有些熟悉?
![2](https://img-blog.csdnimg.cn/img_convert/95bf81565f1e4d1b89e0ea54acd2f022.png)
class Task:
@staticmethod
def pre_task():
print(“running pre_task”)
@staticmethod
def task():
print("running task")
@staticmethod
def post\_task():
print("running post\_task")
func = Task.dict.get(“pre_task”)
func.func() # running pre_task
func() # 为什么不这样用?
### 6. globals 函数
import sys
def pre_task():
print(“running pre_task”)
def task():
print(“running task”)
def post_task():
print(“running post_task”)
cmdList = [“pre_task”, “task”, “post_task”]
for cmd in cmdList:
func = globals().get(cmd)
func()
running pre_task
running task
running post_task
### 7. exec 函数
你可以在一个字符串中定义你的函数,并使用compile函数将它编译成字节码,然后使用exec来执行它。
方式1
pre_task = “”"
print(“running pre_task”)
“”"
exec(compile(pre_task, ‘’, ‘exec’))
running pre_task
方式2
with open(‘./source.txt’) as f:
source = f.read()
exec(compile(source, ‘source.txt’, ‘exec’))
### 8. attrgetter 函数
在内置库`operator`中,有一个获取属性的方法,叫做`attrgetter`,我们可以通过它获取函数后执行。
from operator import attrgetter
class People:
def speak(self, dest):
print(“Hello, %s” %dest)
p = People()
caller = attrgetter(“speak”)
caller§(“Tony”) # Hello, Tony
本文第四条
caller2 = getattr(p, “speak”)
caller2(“Tony”) # Hello, Tony
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**