python-获取类名和方法名,动态创建类和方法及属性
一、获取类名和方法名
1.在函数外部获取函数名称,用func.__name__获取
2.在函数内部获取当前函数名称,用sys._getframe().f_code.co_name方法获取
3.使用inspect模块动态获取当前运行的函数名,return inspect.stack()[1][3]需要封装个方法在被测函数中调用
4.在类内部获取类名称self.__class__.__name__
import inspect,sys def test1(): #获取正在运行函数(或方法)名称 return inspect.stack()[1][3] def test2(): #获取当前函数(或方法)名称 print(sys._getframe().f_code.co_name) #调用test1函数 print(test1())
5.获取函数信息
import inspect #函数信息 def test1(): pass print("函数信息:",inspect.getfullargspec(test1)) #函数的入参出参信息 def test2(a:"描述",b:object,c:int=None,d:str='http') -> str: print("函数的入参出参信息:",test2.__annotations__) test2(a=1,b='2')
二、动态创建类和方法及属性
1.使用type动态创建类
type('child_example', (class_example,), {'echo': echo}) #(类名,继承,属性)
type() #可以被用来动态创建class,这是因为实际上type是一个metaclass
def __init__(self,name,age): self.name = name self.age = age Dog_class = type("Dog",(object,),{"role":"dog","__init__":__init__}) #动态添加属性与方法 d = Dog_class('shuzf',22) print(type(Dog_class)) print(type(d)) print(d.role,d.name,d.age) out: <class 'type'> <class '__main__.Dog'> dog shuzf 22
2.使用setattr() 动态创建方法、属性
class A(): name = 'python' @classmethod def funcmethod(cls): return 'Hello world:funcmethod' setattr(A, 'age',30) #创建变量并赋值,可在下次直接使用 setattr(A,'funcmethod_class',A.funcmethod) #创建变量并赋值方法
方法和函数的区别:
1、方法是特殊的函数,可以说是函数的子集
2、方法常常是和类有关的,是面向对象语言中会用到的,需要通过对象或类调用
3、函数是指一段可以直接被其名称调用的代码块,它可以传入一些参数进行处理并返回一些数据,所有传入函数的数据都是被明确定义
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人