当前位置: 首页 > 图灵资讯 > 行业资讯> Python中property特性属性是什么

Python中property特性属性是什么

发布时间:2025-10-21 21:25:30

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

在python中,由于property的概念,因此无需编写getter和setter的一堆重复代码来操作私有变量。Python“私有变量”通常在变量前添加“_”或“_”,如_attr或__attr,这是一个传统的规范。

将私有属性转化为只读特性

classMyClass:
def__init__(self,x):
self._x=x

这里定义了一个MyClass类,它有一个实例变量_x,绑定用户传输的x值。_x是通过obj的私有变量._x获取不符合语言规范的私有变量,然后我们想通过objjj将_x变成property(特征).x直接访问。

改造后的代码如下:

classMyClass:
def__init__(self,x):
self._x=x
@property
defx(self):
returnself._x

>>>obj=MyClass(10)
>>>obj.x
10

我们将_x变成property特性,以只读的方式获得x值。

现在我们该怎么办才能给x赋值?

>>>obj.x=999
Traceback(mostrecentcalllast):
File"xxx",line14,in<module>
obj.x=23
AttributeError:can'tsetattribute

可以看出,Attributeroro被抛出: can't set attribute。显然,只读法不支持赋值。

相关推荐:Python视频教程

将私有变量转化为可赋值的特性

我们只需要将上述代码转换为:

classMyClass:
def__init__(self,x):
self._x=x
@property
defx(self):
returnself._x

@x.setter
defx(self,value):
self._x=value
>>>obj=MyClass(10)
>>>obj.x=999
>>>obj.x
999

可以看出,我们为x添加了setter,可以直接为objj添加setter.x赋值操作。

property属性可以覆盖实例属性

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

>>>obj=MyClass(10)
>>>obj.__dict__
{'_x':999}#此时实例变量中有_x值。
>>>obj.__dict__['x']=设置obj的实例变量有x值,与property属性重名!
>>>obj.__dict__
{'_x':999,'x':此时实例变量中有_x和x值
>>>obj.x#结果是obj的实例变量还是property属性?
10

如上代码所示,obj对象具有_x实例变量和xproperty属性,我们强行为obj添加x实例变量,与property属性x同名!

通过obj.x我们知道返回的是property属性,说明property属性会覆盖实例属性!也可以理解为property属性更优先!

property类分析

我们通常使用内置的@property装饰品。但事实上,property是一个类别。python中类的调用方法与函数相似。它们都是可调用对象。

property的结构方法如下:

classproperty(object):
def__init__(self,fget=None,fset=None,fdel=None,doc=None):
""""""

它接受四个参数,可以是空的。

一是getter,二是setter,三是delete函数,四是文档。

上述代码的另一种写作方法

classMyClass:
def__init__(self,x):
self._x=x
defget_x(self):
returnself._x
defset_x(self,value):
self._x=value
x=property(get_x,set_x)
>>>obj=MyClass(10)
>>>obj.x
10

以上,x是property的例子,设置了getter和setter,作为Myclass类的类变量。

以上是对property属性的分析。

相关文章

Python中property特性属性是什么

Python中property特性属性是什么

2025-10-21
Python魔法方法之__getattr__和getattribute

Python魔法方法之__getattr__和getattribute

2025-10-21
python安装MongoDB

python安装MongoDB

2025-10-21
Python运算符优先级

Python运算符优先级

2025-10-21
Python如何把类当做字典来访问

Python如何把类当做字典来访问

2025-10-21
Python列表推导式(for表达式)及用法

Python列表推导式(for表达式)及用法

2025-10-21