python中关于property的最详细使用方法

为什么要写这篇文章

其实是因为最近学到了python的property装饰器的相关知识,刚开始学得云里雾里,于是乎,看了许多相关博客,不巧,大概是自己基础不太好吧,真心感觉许多人写的太过深奥,而且不是很全面。于是本人花了整整一下午实验,现在将关于property的相关知识分享出来。如有错误之处,还望各位不吝赐教!

什么是property装饰器

顾名思义,这是一个装饰器,起到一个辅助作用,具体理解请看下面一个例子。我们知道,程序中有许多变量都有范围的限制,比如年龄,工资,身高等不可能为负数。但是用户输入时,有时会不可避免地输入非法的值,如果我们的程序没有一个判断,那么极有可能导致整个程序崩溃!因此,我们常常会写一些set(),get()等函数来判断,但常常会过于麻烦,这时,便出现了property装饰器,它既有判断的功能,而且非常简洁。

set()和get()的使用

class A:
  def set_age(self, age):
    if 0 < age < 120:
      self.age = age
    else:
      print("非法的年龄!默认为18")
      self.age = 0
  def get_age(self):
    return self.age
a = A()
a.set_age(19)
print(a.age)
a.set_age(180)
print(a.age)

结果如下:

19
非法的年龄!默认为18
0

不可否认,这样确实达到了我们想要的效果,事实上,Java语言就是这样实现的。但是python具有更简洁的表达,就是property装饰器。

property装饰器的使用

class A:
  @property
  def age(self):
    return self._age
  @age.setter
  def age(self, age):
    if 0 < age < 120:
      self._age = age
    else:
      self._age = 18
      print("非法的年龄!默认为18")
a = A()
a.age = 19
print(a.age)
a.age = 180
print(a.age)

这里的@property相当于get()方法,@age.setter相当于set()方法。

好处

1.property装饰器将set()和get()方法变成了属性!可以用 .age 来设置值,不需要用括号,方便更改。
2.增加了新的功能------只读,如果你只写@property而不写@age.setter,那么这个变量就是只读的,重新赋值则会报错。增加了程序的安全性。
3.注意到property修饰的是私有成员,而私有成员本来相对来说更安全一点,这体现了代码的一致性。

注意事项

1.如果你要使修饰的成员只读,则必须在定义时就设置好值,否则会报错。
2.property装饰器只能修饰私有成员,如果修饰非私有成员,则会报循环的错误。结果确实是这样,但原因不太清楚,烦请大佬们不吝赐教!
3.setter前的变量必须是property修饰的变量,如本例中是age,二者必须一致。

到此这篇关于python中关于property的最详细使用方法的文章就介绍到这了,更多相关python property使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python中property和setter装饰器用法

    作用:调用方法改为调用对象, 比如 : p.set_name() 改为 p.set_name 区别:前者改变get方法,后者改变set方法 效果图: 代码: class Person: def __init__(self,name): self._name = name def get_name(self): return self._name def set_name(self,name): self._name = name p = Person('小黑') print(p.get_name

  • python property的使用技巧分享

    property属性 一种用起来像是使用实例属性一样的特殊属性,可以对应于某个方法 既要保护类的封装特性,又要让开发者可以使用 对象.属性 的方式操作方法,@property 装饰器,可以直接通过方法名来访问方法,不需要在方法名后添加一对  () 小括号. 来看下求圆的面积的例子 class Circle(object): PI = 3.14 def __init__(self, r): # r圆的半径 self.r = r self.__area = self.PI * self.r * se

  • Python @property装饰器原理解析

    这篇文章主要介绍了Python @property装饰器原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.通过@property装饰器,可以直接通过方法名来访问方法,不需要在方法名后添加一对"()"小括号. class Person: def __init__(self, name): self.__name = name @property def say(self): return self.__name xioabai

  • 一文详述 Python 中的 property 语法

    property() 函数的作用是在新式类中返回属性值. Python中有一个property的语法,它类似于C#的get set语法,其功能有以下两点: 将类方法设置为只读属性: 实现属性的getter和setter方法: 下面开始本文的重点介绍,Python 中的 property 语法介绍,具体内容如下所示: 在大多数语言的程序中,一个类,每有一个属性,就会对应 setter 和 getter,基本都是标配. 示例: class Money(object): def __init__(se

  • Python @property及getter setter原理详解

    @property作用: python的@property是python的一种装饰器,是用来修饰方法的. 我们可以使用@property装饰器来创建只读属性,@property装饰器会将方法转换为相同名称的只读属性,可以与所定义的属性配合使用,这样可以防止属性被修改. 1.修饰方法,让方法可以像属性一样访问. class DataSet(object): @property def method_with_property(self): ##含有@property return 15 def m

  • Python内置函数property()如何使用

    代码 class Shuxing(): def __init__(self, size = 10): self.size = size def getSize(self): print('getSize') return self.size def setSize(self, value): print('setSize') self.size = value def delSize(self): print('delSize') del self.size x = property(getSi

  • Python特殊属性property原理及使用方法解析

    1 什么是特性property property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值 import math class Circle: def __init__(self,radius): #圆的半径radius self.radius=radius @property def area(self): return math.pi * self.radius**2 #计算面积 @property def perimeter(self): return 2*math.pi*

  • python中@property的作用和getter setter的解释

    @property作用: python的@property是python的一种装饰器,是用来修饰方法的. 我们可以使用@property装饰器来创建只读属性,@property装饰器会将方法转换为相同名称的只读属性,可以与所定义的属性配合使用,这样可以防止属性被修改. 1.修饰方法,让方法可以像属性一样访问. class DataSet(object): @property def method_with_property(self): ##含有@property return 15 def m

  • Python 从attribute到property详解

    字面意思上的区别 Attribute与property, 都可翻译成属性. 虽然无论是在中文中还是英文中 它们的意思都几乎一样, 但仍有些许差别. Google了好几下, 找到了一个看起来比较靠谱的解释: According to Webster, a property is a characteristic that belongs to a thing's essential nature and may be used to describe a type or species. An a

  • Python 中@property的用法详解

    在绑定属性时,如果我们直接把属性赋值给对象,比如: p = Person() p.name= 'Mary' 我们先看个详细的例子(注意双下划线name和age定义为私有变量): class Person(object): def __init__(self, name, age): self.__name = name self.__age = age def get_age_fun(self): return self.__age def set_age_fun(self, value): i

  • Python如何使用@property @x.setter及@x.deleter

    @property可以将python定义的函数"当做"属性访问,从而提供更加友好访问方式,但是有时候setter/deleter也是需要的. 只有@property表示只读. 同时有@property和@x.setter表示可读可写. 同时有@property和@x.setter和@x.deleter表示可读可写可删除. 代码如下 class student(object): #新式类 def __init__(self,id): self.__id=id @property #读 d

  • 属性与 @property 方法让你的python更高效

    一.用属性替代 getter 或 setter 方法 以下代码中包含手动实现的 getter(get_ohms) 和 setter(set_ohms) 方法: class OldResistor(object): def __init__(self, ohms): self._ohms = ohms self.voltage = 0 self.current = 0 def get_ohms(self): return self._ohms def set_ohms(self, ohms): s

随机推荐