程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

什么是属性对象?

发布于2019-09-11 19:44     阅读(914)     评论(0)     点赞(27)     收藏(5)


我不是python的新手,但我在这里有一个非常基本的问题。

我正在玩python,发现有type属性

>>> property
<type 'property'>

但我只听说过函数上下文中的属性。

>>> a = property()
<property object at 0x0246C090>

但是财产对象怎么样?它们有什么用?属性方法不是非常直观或暗示性的

>>> dir(a)
['__class__', '__delattr__', '__delete__', '__doc__', '__format__', '__get__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__set__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'deleter', 'fdel', 'fget', 'fset', 'getter', 'setter']

谢谢你的关注!


解决方案


property对象是什么,你实际上是想作为一个属性。考虑这个例子:

class Foo(object):
    def __init__(self):
        self._bar = 0

    @property
    def bar(self):
        return self._bar + 5

Foo.bar是一个具有__get__方法的属性对象当你写的东西像

x = Foo()
print(x.bar)

查找用于x.bar认定,type(x).bar具有__get__方法等属性查找变得等效于

type(x).bar.__get__(x, type(x))

它产生了价值x._bar + 5

property作为装饰器的使用有点模糊了bar作为property对象的事实一个等价的定义是

class Foo(object):
     def __init__(self):
         self._bar = 0

     bar = property(lambda self: self._bar + 5)

它更明确地显示您正在创建一个property具有给定lambda表达式对象作为该属性的getter,并将该对象绑定到class属性bar

property类(连同实例方法,类方法和静态方法),是Python一般描述协议,该协议定义了类的行为与属性的特定的应用程序__get____set__和/或__del__方法。



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/108054/a7dcdf638cb61e24e2ec/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

27 0
收藏该文
已收藏

评论内容:(最多支持255个字符)