类中变量私有化和调用:__x和getx/setx或者property

__xx:双前置下划线,子类不可继承属性、方法,父类私有。

详见:https://www.cnblogs.com/andy9468/p/8299448.html

 

例子1:隐藏数据:私有化后,用get和set方法

 1 class MoneyClass(object):
 2     def __init__(self):
 3         self.__money = 0
 4 
 5     def get_money(self):
 6         return self.__money
 7 
 8     def set_money(self, value):
 9         if isinstance(value, int):
10             self.__money = value
11         else:
12             print("error:不是整型数字")
13 
14 
15 m1 = MoneyClass()
16 print(m1.get_money())
17 m1.set_money(50)
18 print(m1.get_money())
View Code

输出:

0

50

 

例子2:property属性:自动调用get、set方法

 1 class MoneyClass(object):
 2     def __init__(self):
 3         self.__money = 0
 4 
 5     def get_money(self):
 6         return self.__money
 7 
 8     def set_money(self, value):
 9         if isinstance(value, int):
10             self.__money = value
11         else:
12             print("error:不是整型数字")
13 
14     getsetmoney = property(get_money, set_money)
15 
16 
17 m1 = MoneyClass()
18 print(m1.getsetmoney)
19 m1.getsetmoney = 800
20 print(m1.getsetmoney)
View Code

 输出:

0

800

 

例子3:property装饰器:自动调用get、set方法

 1 class MoneyClass(object):
 2     def __init__(self):
 3         self.__money = 0
 4 
 5     @property
 6     def getsetmoney(self):
 7         return self.__money
 8 
 9     @getsetmoney.setter
10     def getsetmoney(self, value):
11         if isinstance(value, int):
12             self.__money = value
13         else:
14             print("error:不是整型数字")
15 
16 
17 m1 = MoneyClass()
18 print(m1.getsetmoney)
19 m1.getsetmoney = 1000
20 print(m1.getsetmoney)
View Code

输出:

0

1000

 

posted @ 2019-07-05 14:57  安迪9468  阅读(324)  评论(0编辑  收藏  举报