资讯专栏INFORMATION COLUMN

详解python自定义方法属性

shery / 1552人阅读

摘要:在自定义方法中有一些只读属性,一般我们用不到,但是了解下也不错,通过这篇文章,我们还可以了解到绑定方法和非绑定方法的区别。指代绑定方法的类或者调用非绑定方法的类。

在python自定义方法中有一些只读属性,一般我们用不到,但是了解下也不错,通过这篇文章,我们还可以了解到==绑定方法==和==非绑定方法==的区别。

im_self 指代类的实例对象。

im_func 指代函数对象。

im_class 指代绑定方法的类或者调用非绑定方法的类。

__doc__ 方法的文档注释

__name__ 方法名

__module__ 方法所在的模块名。

__func__ 等价于im_func

__self__ 等价于im_self

示例如下:

class Stu(object):
    def __init__(self, name):
        self.name = name

    def get_name(self):
        "this is the doc"
        return self.name

def show_attributes(method):
    print "im_self=", method.im_self
    print "__self__=", method.__self__
    print "im_func=", method.im_func
    print "__func__=", method.__func__
    print "im_class=", method.im_class
    print "__doc__=", method.__doc__
    print "__module__=", method.__module__
    
print "...........bounded method........"
stu=Stu("Jim")
method = stu.get_name
show_attributes(method)
method()
print "...........unbounded method......"
method = Stu.get_name
show_attributes(method)
method()

输出结果如下:

...........bounded method.......Traceback (most recent call last):.
im_self= <__main__.Stu object at 0x0245D2B0>
__self__= <__main__.Stu object at 0x0245D2B0>
im_func= 
__func__= 
im_class= 
__doc__= this is the doc
__module__= __main__
...........unbounded method......
im_self= None
__self__= None
im_func= 
__func__= 
im_class= 
__doc__= this is the doc
__module__= __main__

  File "E:demopydemo.py", line 29, in 
    method()
TypeError: unbound method get_name() must be called with Stu instance as first argument (got nothing instead)

从上面的输出结果可以看出,当通过类直接调用方法时,方法的im_self__self__属性为None,该方法为非绑定方法(unbound method),当我们通过实例调用该方法时,方法的im_self__self__属性为实例对象。这时该方法为绑定方法(bound method),但是不管哪种情况,方法的im_class都为调用类,而im_func为原始的函数对象。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38009.html

相关文章

  • Python -- 元类metaclass详解

    摘要:原链接中的元类是什么类也是对象在理解元类之前,需要掌握中类概念。事实上,是中用于创建所有类的元类。类本身是元类的对象在中,除了,一切皆对象,一切都是类或者元类的对象。事实上是自己的元类, 学习契机 项目中使用Elasticsearch(ES)存储海量业务数据,基于ES向外提供的API进一层封装,按需处理原始数据提供更精确、更多样化的结果。在研究这一层的代码时接触到@six.add_me...

    tracy 评论0 收藏0
  • SpringBoot 实战 (三) | 配置文件详解

    摘要:前言如题,今天解析下的配置文件。这时我们就可以用的属性来配置随机数,比如随机字符串随机随机以内的随机数的随机数使用多配置文件很多时候我们开发项目都需要很多套环境,比如有测试环境,开发环境以及生产环境。原因是,是以的编码方式读取配置文件。 微信公众号:一个优秀的废人如有问题或建议,请后台留言,我会尽力解决你的问题。 前言 如题,今天解析下 SpringBoot 的配置文件。 自定义属性加...

    chenjiang3 评论0 收藏0
  • 私有化规则与属性Property

    摘要:上一篇文章装饰器真正入门的鉴定标准下一篇文章垃圾回收详解私有化变量定义规则变量形式解读公有变量单前置下划线,私有化属性或方法,禁止导入,类对象和子类进可以访问。双前置下划线,避免与子类中的属性命名冲突,无法再在外部直接访问。 上一篇文章:Python装饰器:python真正入门的鉴定标准下一篇文章:Python垃圾回收详解 1、私有化 变量定义规则 变量形式 解读 xx 公...

    whjin 评论0 收藏0

发表评论

0条评论

shery

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<