首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用__getattribute__获取方法的名称,没有类型错误

getattribute是Python中的一个内置方法,用于获取对象的属性或方法的名称。它在对象的属性或方法被访问时自动调用。

该方法可以被重写,以便在属性或方法被访问时执行一些额外的操作。在使用getattribute方法时,需要注意以下几点:

  1. getattribute方法会在每次访问对象属性或方法时被调用,包括实例属性和类属性。
  2. 如果在getattribute方法内部再次访问同一个属性或方法,就会导致无限递归的错误。因此,在方法内部访问属性或方法时,需要使用super().getattribute('name')来避免递归调用。
  3. 如果要获取属性或方法的值,可以使用super().getattribute('name')来返回属性或方法的值。
  4. 如果在getattribute方法中抛出AttributeError异常,会导致访问属性或方法失败。

使用getattribute方法可以实现一些高级的功能,如动态属性访问、属性拦截、属性计算等。在实际应用中,可以根据具体的需求来灵活运用。

以下是一个示例代码,演示如何使用getattribute方法获取方法的名称:

代码语言:txt
复制
class MyClass:
    def __getattribute__(self, name):
        if callable(getattr(self, name)):  # 判断是否为方法
            return name
        else:
            raise AttributeError("'{0}' object has no attribute '{1}'".format(self.__class__.__name__, name))

my_obj = MyClass()
print(my_obj.__getattribute__('test'))  # 输出: test
print(my_obj.__getattribute__('attribute'))  # 抛出AttributeError异常

在这个例子中,如果传入的属性或方法名是一个方法,就直接返回方法的名称;如果传入的是一个属性名或不存在的属性名,则会抛出AttributeError异常。

相关链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SAS获取某目录下所有指定类型的文件名称

今天看到一个群友提的一个问题:SAS中如何简单地获取某一目录下所有指定类型的文件名称并赋值为宏变量?...用常规的方法可能要20多行代码,如果用FILENAME PIPE只需要9行代码就可以轻松解决,语法如下: FILENAME fileref PIPE 'UNIX-command' ;filerefis...以获取程序所在目录下所有TXT文件名为例,实现代码如下: filename filelst pipe "ls ./*.txt | sed -e 's#.*/##; s#\..*$##' | paste...*$##是用来去掉文件后缀;命令paste,顾名思义就是将几个文件连接起来;选项-s的作用是将每个文件作为一个处理单元;选项-d的作用是用来设定间隔符。....*$##' | awk 'ORS=""|""'"; 不过这个命令有一个小问题,就是在最后会多出一个间隔符,需要在后续的DATA步中处理一下。

4.7K20
  • spring aop 利用JoinPoint获取参数的值和方法名称

    大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说spring aop 利用JoinPoint获取参数的值和方法名称[通俗易懂],希望能够帮助大家进步!!!...我们先来了解一下这两个接口的主要方法: 1)JoinPoint  java.lang.Object[] getArgs():获取连接点方法运行时的入参列表;  Signature getSignature...() :获取连接点的方法签名对象;  java.lang.Object getTarget() :获取连接点所在的目标对象;  java.lang.Object getThis() :获取代理对象本身...) throws java.lang.Throwable:通过反射执行目标对象连接点处的方法,不过使用新的入参替换原来的入参。...一、概述 AOP的实现方法在上两篇博客中已经用了两种方法来实现现在的问题来了虽然我们利用AOP,那么客户端如何信息传递?

    7K10

    获取对象属性类型、属性名称、属性值的研究:反射和JEXL解析引擎

    先简单介绍下反射的概念:java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java...反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以在运行时装配。在实际的业务中,可能会动态根据属性去获取值。...fields[i].getType()); fieldNames[i] = fields[i].getName(); } return fieldNames; } /** * 获取属性类型...entry.getValue()); } System.out.println("---------------------------"); } } 还有一种将字符串转换成java代码并执行的方法...:Java Expression Language (JEXL) 是一个表达式语言引擎,可以用来在应用或者框架中使用。

    6.4K50

    切面获取泛型方法T的真实类型

    随着ServiceMock项目的推广实施,遇到的坑也越来越稀奇古怪了。 这次是介绍一个使用了Mybatis Pro的项目中遇到的问题。Mybatis是在Spring项目中非常常见的持久层框架。...而ServiceMock的录制回放的基本套路就是通过获取到被录制的方法的返回值类型来进行回放。...这样,只要获取到了切点中正在执行方法的返回值(原始类型或者是某个类的实例),然后根据返回值来获取到Class,并最终获取到Type。这样就可以继续愉快地进行反序列化了。...().equals("T") || returnType.getTypeName().equals("java.util.List")) { 对于T 或者是List的泛型方法,就在执行时获取一下执行类型并记录...而在回放时,可以通过获取记录的类型来进行反射,获取对应的类,并最终实现反序列化。

    2.4K30

    常见文件的mine type类型及获取方法

    前面提到Kangle 服务器添加 mine type 文件类型,但是网上给出的文件类型难免没有那我全面,往往我们正需要的网上却没有。...下面介绍一个简单的 mine type 文件类型的获取方式 ,利用 JS 获取文件的类型: 首先我们写一个 input 的文件上传按钮,HTML: 然后利用 JS 获取到该按钮,监听他的 onchange 事件,打印出文件的 mine type 文件类型:     var input = document.getElementById...JavaScript 识别文件 MIME TYPE 类型 笔记:使用 JavaScript 识别文件 MIME TYPE 类型 - 后续问题和值得记录 声明:本文由w3h5原创,转载请注明出处:《常见文件的...mine type类型及获取方法》 https://www.w3h5.com/post/140.html

    5.4K00

    Go错误集锦 | 方法接收者的值类型和指针类型

    我们在定义方法时,接收者是该选择使用值类型还是选择使用指针类型呢? 01 方法接收者是值类型 在Go中,大家都听过的一切都是拷贝。...如图所示: 03 接收者的类型该如何选择 在定义结构体方法时,接收者类型是使用值类型还是指针类型呢?下面我们列出一些常见的选择依据来帮助我们选择使用哪种类型。...例如sync包中的类型字段是不能被拷贝的。 接收者建议使用指针类型的场景: 如果接收者是一个很大的对象时,建议优先使用指针类型。使用指针类型能够进行快速拷贝,可以提高调用方法的效率。...当接收者是map、function或channel类型时。否则,会导致编译错误。 接收者建议使用值类型的场景: 当接收者是一个不被改变的切片类型时。 当接收者的类型是一个基础的类型时。...同时,方法的接收者类型我们依然使用的是值类型,但最终结果依然会改变原对象中balance的值。

    83910

    Java获取函数参数名称的另一种方法

    https://blog.csdn.net/10km/article/details/79308845 关于获取java 方法的参数名(这里指java 1.8以前的版本,java 1.8...已经提供了相关的原生方法),网上可以找到不少文章,这篇文章讲得比较全面了:《Java获取函数参数名称的几种方法》,无外乎是借用asm,javasist等第三方库。...我对axis2比较熟悉,知道axis2中在生成client代码时也需要获取方法的参数名,于是通过分析源码找到了axis2的实现代码。...1.6.2.jar中(源码下载地址:axis2-kernel-1.6.2-sources.jar) 好就好在这个package没有引用package之外的代码,所以可以单独提取出来独立调用。...构造函数或方法的参数类型 * @return * @throws NoSuchMethodException * @see #getParameterNames(String

    90810

    GoFrame 错误处理的常用方法&错误码的使用

    前言摘要这篇文章将为大家介绍:GoFrame 错误处理的常用方法&错误码的使用。如何自定义错误对象、如何忽略部分堆栈信息、如何自定义错误码的返回、如何获取error对象中的错误码。...NewSkip(skip int, text string) error func NewSkipf(skip int, format string, args ...interface{}) error错误码使用错误码相关方法概览...,用于创建一个自定义错误信息的error对象,并包含堆栈信息,并增加错误码对象的输入。...,用于包裹其他错误error对象,构造成多级的错误信息,包含堆栈信息,并增加错误码参数的输入。...error中的错误码接口func Code(err error) gcode.Code当给定的error参数不带有错误码信息时,该方法返回预定义的错误码gcode.CodeNil

    1K20

    通过js来获取所使用的浏览器名称和版本号

    2015-05-05 09:07:32 昨天晚上加班加到了两点半,困扰我最大的就是浏览器的兼容问题。无奈,一些网页效果只能通过判断是何种浏览器来进行选择不同的方法来解决了。...网上大堆资料都有一个关键词是 navigator.appName,但是这个方法获取的浏览器的名字只有两种要么是IE要么就是Netscap,倒是可以用来判断是否使用了IE,但是我想获取具体的浏览器产品名字比如...所以只好通过navigator.userAgent,但是这个字符串是非常长的,分析他的特征,通过正则表达式来解决这个问题是不错的方法。...1) 获取浏览器名字+版本字符串 function getBrowserInfo() { var agent = navigator.userAgent.toLowerCase() ; var regStr_ie...agent.indexOf("safari") > 0 && agent.indexOf("chrome") < 0) { return agent.match(regStr_saf) ; } } (2)然后获取版本号

    3.3K30

    关于四种获取当前执行方法名称方案的基准测试报告

    本文是对作者上一篇文章中 Java 面试题之 Logback 打印日志是如何获取当前方法名称的?介绍的四种获取当前执行方法名称方案的基准测试报告。...这四种方法如下,Java 面试题之 Logback 打印日志是如何获取当前方法名称的地址:https://cloud.tencent.com/developer/article/2357312使用 Thread.currentThread...().getStackTrace() 方案使用异常对象的 getStackTrace() 方案使用匿名内部类的 getClass().getEnclosingMethod() 方案Java 9 的 Stack-Walking...JMH 相关概念 BeachMark:基准测试,主要用来测试一些方法的性能,可以根据不同的参数以不同的单位进行计算(可以使用平均时间作为单位,也可以使用吞吐量作为单位,可以在 BenchmarkMode...@Threads:类级或方法级注解,用来指定每个进程中的测试线程数,可以设置为Threads.MAX来使用所有可用的线程。@Fork:类级或方法级注解,用来指定进行 fork 的次数。

    34470

    关于四种获取当前执行方法名称方案的基准测试报告

    本文是对作者上一篇文章中 Java 面试题之 Logback 打印日志是如何获取当前方法名称的? 介绍的四种获取当前执行方法名称方案的基准测试报告。...这四种方法如下, 使用 Thread.currentThread().getStackTrace() 方案 使用异常对象的 getStackTrace() 方案 使用匿名内部类的 getClass()....JMH 相关概念 BeachMark:基准测试,主要用来测试一些方法的性能,可以根据不同的参数以不同的单位进行计算(可以使用平均时间作为单位,也可以使用吞吐量作为单位,可以在 BenchmarkMode...@Threads:类级或方法级注解,用来指定每个进程中的测试线程数,可以设置为Threads.MAX来使用所有可用的线程。 @Fork:类级或方法级注解,用来指定进行 fork 的次数。...·END· 因公众号更改推送规则,关注公众号主页点击右上角"设为星标"第一时间获取博主精彩技术干货 往期原创热门文章推荐: Java 面试题之 Logback 打印日志是如何获取当前方法名称的?

    27620
    领券