1.含义
封装是对全局作用域中其它区域隐藏多余信息的原则。
2.实例
如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问。
代码如下:
1 class Student(object):
2
3 def __init__(self, name, score):
4 self.__name = name
5 self.__score = score
6
7 def print_score(self):
8 print(‘%s: %s‘ % (self.__name, self.__score))
二.继承
什么是继承
我们不想把同一段代码写好几次,之前使用的函数避免了这种情况。但现在又有个更微妙的问题。如果已经有了一个类,又想建立一个非常类似的类,只是添加几个方法。
比如有人类,我们又想在人类的基础上建立学生类、医生类,教师类。因为他们都具有共同的属性和方法,比如都有 姓名 、年龄 、性别 等共同属性,还有吃饭、睡觉等共同方法。我们就可以写一个人类作为父类,包括姓名、年龄、性别等属性和吃饭睡觉等方法。然后再写多个子类继承父类的这些属性和方法。
但需要注意的是,父类的私有属性和方法不会被子类继承
当子类和父类都存在相同的方法时,我们说,子类的方法覆盖了父类的方法,在代码运行的时候,总是会调用子类的方法。这样,我们就获得了继承的另一个好处:多态。
单下划线、双下划线、头尾双下划线说明:
__foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。
_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
__foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。
四、三维向量类
1 class vector3: 2 3 def __init__(self, x_ = 0, y_ = 0, z_ = 0): #构造函数 4 5 self.x = x_ 6 7 self.y = y_ 8 9 self.z = z_ 10 11 def __add__(self, obj): 12 13 return vector3(self.x+obj.x, self.y+obj.y, self.z+obj.z) 14 15 def __sub__(self, obj): 16 return vector3(self.x-obj.x, self.y-obj.y, self.z-obj.z) 17 18 def __mul__(self, obj): 19 20 return vector3(self.x*obj.x, self.y*obj.y, self.z*obj.z) 21 22 def __pow__(self, obj): 23 24 return vector3(self.y*obj.z-obj.y*self.z, self.z*obj.x-self.x*obj.z, self.x*obj.y-obj.x*self.y) 25 26 def __str__(self): 27 28 return str(self.x)+‘,‘+str(self.y)+‘,‘+str(self.z) 29 30 v1 = vector3(1, 2, 3) 31 32 v2 = vector3(0, 1, 2) 33 34 print (v1 + v2) 35 print (v1 - v2) 36 print (v1 * v2) 37 print (v1 ** v2)
原文:https://www.cnblogs.com/slj-xt/p/13186218.html