Python中属性特性属性指的是什么?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!
在Java中,通常在类中定义的成员变量为私有变量,在类的实例中不能直接通过对象。属性直接操作,而是要通过getter和setter来操作私有变量。
而在Python中,因为有财产这个概念,所以不需要写getter和setter一堆重复的代码来操作私有变量.Python“私有变量”通常在变量前加上“_”或者“__”,例如_attr或者__attr,这是约定俗成的规范。
<强>把私有属性变成只读特性强>
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中属性特性属性指的是什么大概了解了吗?希望文章内容对大家有所帮助。如果想了解更多相关文章内容,欢迎关注行业资讯频道。