Python语言学习讲解十四:python之用纯属性取代get和set方法
2016-11-28 16:35
751 查看
注:每周一到周五都会进行相关Python基础知识更新,欢迎大家提宝贵的意见
一、从其他语言转入python的开发者,一般可能在设计类的时候,在其中填写get和set方法,用来获取和设置类的成员属性。
eg:
class A(object):
def get_a(self):
return self.a
def set_a(self,sum):
self.a = sum
这种setter 和 getter方法用起来很简单,但是不是python语言的标准写法。
对于python学习者来说,应该先从public属性写起。我们可以使用@property修饰器和setter方法来做
class B(object):
def __init__(self):
self._om = 1
@property######属性的get方法
def om(self):
return self_om
@property.setter#######属性的set方法
def om(self, t_om):
if t_om<= 0:
raise ValueError("%ft_om must be > 0" % t_om)
self._om = t_om
此时调用的话就可以直接使用属性名字了。说白了就是换一种写法而已,其实没有啥特别的。也可以使用@property来防止父类的属性遭到修改。
注意:@property的最大缺点在于:和属性相关的方法,只能在子类中共享,而与之无关的其他类,则无法复用同一份实现代码。不过python也提供了描述符机制,开发者可以通过它来复用与属性有关的逻辑。
总结:
1、编写新类的时候,应该用简单的public属性来定义其接口,二不要手工实现set和get方法
2、如果访问对象的某个属性时,需要表现出特殊的行为,那就用@property来定义这种行为
3、@property方法应该遵循最小惊讶原则,从而不产生奇怪的副作用
4、@property方法需要执行的迅速一些,缓慢或者复杂的工作,应该放在普通的方法里面。
一、从其他语言转入python的开发者,一般可能在设计类的时候,在其中填写get和set方法,用来获取和设置类的成员属性。
eg:
class A(object):
def get_a(self):
return self.a
def set_a(self,sum):
self.a = sum
这种setter 和 getter方法用起来很简单,但是不是python语言的标准写法。
对于python学习者来说,应该先从public属性写起。我们可以使用@property修饰器和setter方法来做
class B(object):
def __init__(self):
self._om = 1
@property######属性的get方法
def om(self):
return self_om
@property.setter#######属性的set方法
def om(self, t_om):
if t_om<= 0:
raise ValueError("%ft_om must be > 0" % t_om)
self._om = t_om
此时调用的话就可以直接使用属性名字了。说白了就是换一种写法而已,其实没有啥特别的。也可以使用@property来防止父类的属性遭到修改。
注意:@property的最大缺点在于:和属性相关的方法,只能在子类中共享,而与之无关的其他类,则无法复用同一份实现代码。不过python也提供了描述符机制,开发者可以通过它来复用与属性有关的逻辑。
总结:
1、编写新类的时候,应该用简单的public属性来定义其接口,二不要手工实现set和get方法
2、如果访问对象的某个属性时,需要表现出特殊的行为,那就用@property来定义这种行为
3、@property方法应该遵循最小惊讶原则,从而不产生奇怪的副作用
4、@property方法需要执行的迅速一些,缓慢或者复杂的工作,应该放在普通的方法里面。
相关文章推荐
- Python语言学习讲解十六:python之描述符__set__和__get__ 等解释
- Python语言学习讲解三:详解Python中的split()函数的使用方法
- Python3基础 描述符类与自制property方法 __get__,__set__,__delete__方法 讲一个特殊的类的实例指派给另一个类的属性
- python-用@property将一个方法(例如getXxx/setXxx)变成属性
- OC语言学习 (三) 成员变量get/set方法和“.”语法,@proterty和@synthesize关键字
- 【学习笔记】【OC语言】set方法和get方法
- OC语言学习 (三) 成员变量get/set方法和“.”语法,@proterty和@synthesize关键字
- pytho 学习整理----pytho 类 属性set和get 方法
- OC学习之属性关键字以及set和get方法
- 【Python】 属性的 get 与 set 方法
- 用@property声明的成员属性_xx在重写了get方法以后,再重写set方法,get会报错,提示_xx不存在。困扰已久,望解答
- [工作点滴]属性没有 set/get方法
- Android如何生成公共属性的get,set方法时,去除 成员变量的m前缀
- Python多线程学习 setDaemon方法
- 利用属性名称配置,自动转换成java bean对象的set、get方法的方法
- <<Python基础教程>>学习笔记 | 第09章 | 魔法方法、属性和迭代器
- PHP使用方法重载实现动态创建属性的get和set方法
- PHP使用方法重载实现动态创建属性的get和set方法
- 黑马程序员——OC学习之成员变量的get,set方法多种实现
- 黑马程序员-我的第七篇学习日记:OC成员变量名的命名规范,set方法和get方法