Python中属性特性属性指的是什么

  

Python中属性特性属性指的是什么?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!

在Java中,通常在类中定义的成员变量为私有变量,在类的实例中不能直接通过对象。属性直接操作,而是要通过getter和setter来操作私有变量。

而在Python中,因为有财产这个概念,所以不需要写getter和setter一堆重复的代码来操作私有变量.Python“私有变量”通常在变量前加上“_”或者“__”,例如_attr或者__attr,这是约定俗成的规范。

癙ython中财产特性属性指的是什么"

<强>把私有属性变成只读特性

class  MyClass:   ,,,def  __init__(自我,,x):   ,,,,,,,self._x =, x

这里定义了一个MyClass类,它有一个实例变量值,绑定了用户传来的x值._x是私有变量,通过obj._x获取私有变量不符合语言规范,进而我们要使值变成财产(特性),通过obj。x直接访问。

改造后的代码如下:

class  MyClass:   ,,,def  __init__(自我,,x):   ,,,,,,,self._x =, x   ,,@ property   ,,,def  x(自我):   ,,,,,,,return  self._x   ,,,,   在祝辞祝辞,obj =, MyClass (10)   在祝辞祝辞obj.x   10

我们把值变成了财产特性,以只读的方式获取x的值。

我们现在想为x赋值该怎样做呢?

在祝辞祝辞obj.x =, 999   Traceback  (most  recent  call 最后一个):   File 才能“xxx",, line  14日,拷贝& lt; module>   ,,,obj.x =23   AttributeError:停下来# 39;t  set 属性

可以看的到,抛出了AttributeError:停下来# 39;t组属性。显然,只读方法不支持赋值。

<强>把私有变量变成可赋值的特性

我们只需要在上述代码改造成:

class  MyClass:   ,,,def  __init__(自我,,x):   ,,,,,,,self._x =, x   ,,@ property   ,,,def  x(自我):   ,,,,,,,return  self._x   ,,,,   ,,,@x.setter   ,,,def  x(自我,,值):   ,,,,,,,self._x =价值   在祝辞祝辞,obj =, MyClass (10)   在祝辞祝辞obj.x =, 999   在祝辞祝辞obj.x   999年

可以看的到,我们为x添加了setter,可以直接为obj。x赋值操作。

<强>产权属性能够遮盖实例属性

继续上面的代码,我们看看以下的操作:

在祝辞祝辞,obj =, MyClass (10)   在祝辞祝辞obj.__dict__   {& # 39;_x # 39;:, 999},, #此时实例变量中有值的值   祝辞祝辞祝辞,obj.__dict__ [& # 39; x # 39;],=, 99999,, #设置obj的实例变量有x值,跟产权属性重名!   在祝辞祝辞obj.__dict__   {& # 39;_x # 39;:, 999年,& # 39;x # 39;:, 99999},, #此时实例变量中有值和x的值   在祝辞祝辞,obj.x ,,,, #结果是obj的实例变量还是产权属性?   10

如上代码所示,obj对象有一个值实例变量和一个x的产权属性,我们又强行为obj增加了一个x实例变量,这个实例变量x和产权属性x同名!

通过obj。x我们得知,返回的是产权属性,说明财产属性会遮盖实例属性!也可以理解为产权属性的优先级更大!

<强>属性类解析

我们通常使用内置的@ property装饰器。但其实房地产是一个类,python中类和函数的调用方式都差不多,他们都是可调用对象。

属性的构造方法如下:

class 财产(对象):   ,,,def  __init__(自我,,fget=没有,fset=没有,fdel=没有,医生=None):   ,,,,,,,““““““

它最大接受4个参数,都可以为空。

第一个为getter,第二个为setter,第三个为删除函数,第四个为文档。

上述代码的另一种写法

class  MyClass:   ,,,def  __init__(自我,,x):   ,,,,,,,self._x =, x   ,,,def  get_x(自我):   ,,,,,,,return  self._x   ,,,def  set_x(自我,,值):   ,,,,,,,self._x =价值   ,,,x =,财产(get_x, set_x)   在祝辞祝辞,obj =, MyClass (10)   在祝辞祝辞obj.x   10

如上,x是财产的实例,设置了getter和setter,作为类变量放在MyClass类中。

以上就是产权属性的解析。

感谢各位的阅读!看完上述内容,你们对Python中属性特性属性指的是什么大概了解了吗?希望文章内容对大家有所帮助。如果想了解更多相关文章内容,欢迎关注行业资讯频道。

Python中属性特性属性指的是什么