python中property属性_Python中的property特性属性

引子:

在Java中,我们将对象字段定义为private字段,这样在调用过程中不能直接调用对象字段,需要通过setter/getter进行读取/赋值,保障了数据的安全性。

在Python中,通过property,使得不再需要setter/getter进行private对象字段的包装。Python约定成俗的规定是在private字段前添加“_”/“__”。

private字段变为只读字段:

class TestClass:

def __init__(self, x):

self._x = x

这里定义了一个TestClass类,它有一个实例字段_x,定了用户传来的x值,_x是private字段,通过object._x访问private字段不符合语言规范,进而我们要将_x变为property(特性),通过object.x来访问。

class TestClass(object):

def __init__(self, x):

self._x = x

@property

def x(self):

return self._x

my = TestClass(20)

# 运行ok

print(my.x)

结果:

20

这里能看到,对_x字段进行了 property特性设置,进行只读操作,如果要对_x字段进行赋值该如何操作呢?

class TestClass(object):

def __init__(self, x):

self._x = x

@property

def x(self):

return self._x

# 赋值操作

@x.setter

def x(self, value):

self._x = value

my = TestClass(20)

# 运行ok

print(my.x)

my.x = 30

print(my.x)

结果:

20

30

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

property的构造方法如下:

class property(object):

def __init__(self, fget=None, fset=None, fdel=None, doc=None):

""""""

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

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

上述代码另一种写法

class TestClass:

def __init__(self, x):

self._x = x

def get_x(self):

return self._x

def set_x(self, value):

self._x = value

x = property(get_x, set_x)

>>> obj = TestClass(10)

>>> obj.x

10

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值