zoukankan      html  css  js  c++  java
  • python-获取类名和方法名,动态创建类和方法及属性

    获取类名和方法名
    1.在函数外部获取函数名称,用.__name__获取
    2.在函数内部获取当前函数名称,用sys._getframe().f_code.co_name方法获取
    3.使用inspect模块动态获取当前运行的函数名,return inspect.stack()[1][3]需要封装个方法在被测函数中调用
    4.在类内部获取类名称self.__class__.__name__
    import inspect,sys
    def get__function_name():
        #获取正在运行函数(或方法)名称
        return inspect.stack()[1][3]
    def shuzf():
        print(sys._getframe().f_code.co_name)
        print(get__function_name())

    动态创建类和方法及属性
    1.使用type创建类
    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) #创建变量并赋值方法

     

    获取函数信息

    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')

     

  • 相关阅读:
    HTML连载29-div和span标签
    Java连载14-补码简介&浮点型整数
    Java连载13-整数型字面值的强制转换
    Java连载12-继承开发环境&long类型
    [Python] tkinter 之 Listbox & Combobox
    [Python] Tkinter command
    [java] 转型
    [Python] execl读写
    [c++] 细节
    [刷题] PTA 7-64 最长对称子串
  • 原文地址:https://www.cnblogs.com/shuzf/p/11859345.html
Copyright © 2011-2022 走看看