python08面向对象(封装)

余生颓废 提交于 2020-03-15 13:55:34

一、使用方法,封装变量.

 1 # 使用方法,封装变量.
 2 class Wife:
 3     def __init__(self, name, age, weight):
 4         self.name = name
 5         # 本质:障眼法(实际将变量名改为:_类名__age)
 6         # self.__age = age
 7         self.set_age(age)
 8         # self.__weight = weight
 9         self.set_weight(weight)
10 
11     # 提供公开的读写方法
12     def get_age(self):
13         return self.__age
14 
15     def set_age(self, value):
16         if 21 <= value <= 31:
17             self.__age = value
18         else:
19             raise ValueError("我不要")
20 
21     # 提供公开的读写方法
22     def get_weight(self):
23         return self.__weight
24 
25     def set_weight(self, value):
26         if 40 <= value <= 60:
27             self.__weight = value
28         else:
29             raise ValueError("我不要")
30 
31 """
32 w01 = Wife("铁锤公主", 87, 87)
33 # 重新创建了新实例变量(没有改变类中定义的__age)
34 # w01.__age = 107 
35 w01._Wife__age = 107  # (修改了类中定义的私有变量)
36 
37 print(w01.__dict__)# python内置变量,存储对象的实例变量.
38 """
39 
40 w01 = Wife("铁锤公主", 30, 50)
41 w01.set_age(25)
42 w01.set_weight(55)
43 print(w01.get_age())
44 print(w01.get_weight())

二、使用property(读取方法,写入方法)对象,封装变量.

 1 """
 2     使用property(读取方法,写入方法)对象,封装变量.
 3 """
 4 class Wife:
 5     def __init__(self, name, age, weight):
 6         self.name = name
 7         # self.set_age(age)
 8         self.age = age
 9         # self.set_weight(weight)
10         self.weight = weight
11 
12     def get_age(self):
13         return self.__age
14 
15     def set_age(self, value):
16         if 21 <= value <= 31:
17             self.__age = value
18         else:
19             raise ValueError("我不要")
20 
21     # 属性  property对象拦截对age类变量的读写操作
22     age = property(get_age,set_age)
23 
24     def get_weight(self):
25         return self.__weight
26 
27     def set_weight(self, value):
28         if 40 <= value <= 60:
29             self.__weight = value
30         else:
31             raise ValueError("我不要")
32 
33     weight = property(get_weight,set_weight)
34 
35 w01 = Wife("铁锤公主", 30, 50)
36 # w01.set_age(25)
37 w01.age = 25
38 print(w01.age)
39 w01.weight = 45
40 print(w01.weight)

三、使用标准属性,封装变量.

 1 """
 2     使用标准属性,封装变量.
 3 """
 4 
 5 class Wife:
 6     def __init__(self, name, age, weight):
 7         self.name = name
 8         self.age = age
 9         self.weight = weight
10 
11     @property  # 创建property对象,只负责拦截读取操作
12     def age(self):
13         return self.__age
14 
15     @age.setter  # 只负责拦截写入操作
16     def age(self, value):
17         if 21 <= value <= 31:
18             self.__age = value
19         else:
20             raise ValueError("我不要")
21 
22     @property
23     def weight(self):
24         return self.__weight
25 
26     @weight.setter
27     def weight(self, value):
28         if 40 <= value <= 60:
29             self.__weight = value
30         else:
31             raise ValueError("我不要")
32 
33 w01 = Wife("铁锤公主", 30, 50)
34 w01.age = 25
35 print(w01.age)
36 w01.weight = 45
37 print(w01.weight)

四、属性内存图

五、封装设计思想(分而治之、变则疏之、高内聚、低耦合)

 1 """
 2     封装设计思想
 3         需求:老张开车去东北
 4 """
 5 
 6 
 7 class Person:
 8     def __init__(self, name):
 9         self.name = name
10 
11     @property
12     def name(self):
13         return self.__name
14 
15     @name.setter
16     def name(self, value):
17         self.__name = value
18 
19     def go_to(self, str_postion, type):
20         """
21             去
22         :param str_postion: 位置
23         :param type: 方式 
24         """
25         print(self.name, "去", str_postion)
26         type.run(str_postion)
27 
28 
29 class Car:
30     def run(self, str_position):
31         """
32             行驶
33         :param str_position: 位置 
34         """
35         print("汽车行驶到:", str_position)
36 
37 
38 lz = Person("老张")
39 car = Car()
40 # 老张开车去东北
41 lz.go_to("东北", car)

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!