java的setter、getter 以及python的@property函数

关于python的装饰器的相关知识,可以查看廖雪峰的blog:

http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318435599930270c0381a3b44db991cd6d858064ac0000


然后理解@property装饰器的时候,廖雪峰用了一些java的术语导致我很难理解,比如getter和setter。我百度了一些,找了相关资料:


java getter和setter作用是什么?

在java中经常是声明一个私有的变量,然后给出他们的公共的getter和setter方法。比如:private String name; 
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
请问:这样做的好处是什么?为什么要定义getter和setter呢。直接public String name;这样不是省去很多麻烦吗?

注:希望真正懂的给个明确的答案。在浏览一些技术方面的帖子的时候发现有些人根本就不懂(也许是只学了点皮毛),就那里里信口开河胡说乱说。
收起
jinzhu0216  |  浏览 25312 次
推荐于2016-01-01 02:21:44 最佳答案
用代码讲解一下:
public class Student {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s1=new Student();
s1.setName("小明");
System.out.println("学生的姓名为:"+s1.getName());
}
}
上面的意思是创建一个学生类,声明一个name变量,并给了它getter和setter方法。
先说setter方法,刚开始创建name变量时没有赋值,后面用这个方法给他赋值“小明”
再说getter方法,name变量有了值“小明”后就可以用这个方法把它调出来。
事实上getter和setter的好处有很多。 1、debug。当你发现对象的某个属性数据总是被莫名的修改。你需要找到究竟哪些地方。如果直接将属性写成public的进行赋值。你就不得不在所有用到这个属性的地方下断点。这几乎是很难办到的。 2、getter和setter意味着读写分离。例如只读可以只暴露getter 3、在没有注解时,用来标记哪些属性才能被外部读写。 字数有限,就说3点
 
     
然后可以对照廖雪峰的blog关于@property的章节理解到底什么事@property


你可能感兴趣的:(Python)