• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Python中的属性注册

python 搞java代码 3年前 (2022-05-21) 19次浏览 已收录 0个评论

  在阅读有些Python的开源项目源码时,会看到某些对象调用了一个方法,但在该对象当中却又找不到该方法。还可能会看到在调用某个方法是并不是直接调用而是使用了getattr这个方法;好在现在IDE比较智能,通常也还能够关联找得到该方法;
  调用对象本身没有存在的方法属性、间接调用方法,下面看看在Python中这是怎么回事;
  在Python中有不少内置函数,上面所说的功能正是通过它的内置看书实现的:使用了这么几个内置函数:setattr、getattr、hasattr函数;

setattr函数

  字面意思,设置属性值,它的真实作业也只是设置函数值;但它可以给某个对象设置一个他不存在的属性并且赋值;

<code>class Ten:
    def __init__(self, data):
    print("init")

def register(name, fn):
setattr(Ten, name, fn)
</code>

www#gaodaima.com来源gaodai$ma#com搞$代*码*网搞代码

  上面定义了一个类,该类并没有属性或除了init方法外其他的方法;定义一个register方法,该方法用于向Ten类中注册属性、方法;

<code>t = Ten()
</code>

调用register方法,注册属性val,值为5;

<code>register("val", 5)
print(t.val)
</code>

打印输出注册的属性val值:5;

定义一个新类:Ops

<code>class Ops:
    @staticmethod
    def add(x, y):
        return x + y
</code>

在Ten类中注册ops属性,值为刚定义的类Ops;

<code>register("ops", Ops)
value= t.ops.add(1, 2)
print(value)
</code>

此时可以通过注册的属性ops调用该属性的方法;

getattr、hasattr函数

  getattr函数用于获取属性、hasattr用于检测某个属性是否存在;

<code>value = getattr(t, "val")
print(value)
</code>

  获取上面注册的属性val,输出值为5;
获取不存在的属性会抛出异常,此时可使用hasattr函数用于判断属性是否存在,再做下一步处理;

<code>hasattr(t,"mul")
返回False
hasattr(t,”va”)
返回True
</code>

  了解了这几个函数,看到图中这种代码就可以秒懂了。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python中的属性注册

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址