python的面向对象

一.python的面向对象的重要术语

 1、多态(polymorphism):一个函数有多种表现形式,调用一个方法有多种形式,但是表现出的方法是不一样的。  2、继承(inheritance)子项继承父项的某些功能,在程序中表现某种联系  3、封装(encapsulation)把需要重用的函数或者功能封装,方便其他程序直接调用  4、类:对具有相同数据或者方法的一组对象的集合  5、对象:对象是一个类的具体事例  6、实例化:是一个对象事例话的实现  7、标识:每个对象的事例都需要一个可以唯一标识这个事例的标记  8、实例属性:一个对象就是一组属性的集合  9、事例方法:所有存取或者更新对象某个实例一条或者多条属性函数的集合。  10、类属性:属于一个类中所有对象的属性,  11、类方法:那些无须特定的对性实例就能够工作的从属于类的函数。

二、封装、继承、多态

  一.封装

  1.概念

  公开属性:可以在类以外的任何地方直接访问。

  私有属性:只能在类的内部被直接访问,在对象属性的前面添加两个下划线表示是私有属性。

  2.属性未被私有化

 1 class Person():
 2     def __init__(self, name, age):
 3         # 公开属性
 4         self.name = name
 5         self.age = age
 6 
 7 
 8 p1 = Person("jack", 10)
 9 # 直接访问
10 print(p1.name, p1.age)  # jack 10
11 
12 # 修改
13 p1.name = "tom"
14 p1.age = 19
15 print(p1.name, p1.age)  # tom 19

  3.属性被私有化

  工作原理:一个属性一旦被私有化,在底层形成了 _类名__属性名 的属性名 ,但是不建议使用。私有化属性在底层的存在形式根据操作系统或者Python解释器的不同会有所差别,如果直接使用此种方式访问,违背了Python跨平台的特点。

 1 class Person(object):
 2     def __init__(self, name, age):
 3         self.__name = name
 4         self.__age = age
 5 
 6 
 7 p = Person("jack", 10)
 8 print(p.name,p.age) #AttributeError: 'Person2' object has no attribute 'name'
 9 print(p.__name) #AttributeError: 'Person2' object has no attribute '__name'
10 print(p._Person__name)  # jack

  4. 暴露给外界访问的函数

   在类外面访问属性,无非涉及到两个操作:获取值,修改值。

 1 class Person(object):
 2     def __init__(self, name, age):
 3         self.__name = name
 4         self.__age = age
 5 
 6     # 返回被私有化属性的值
 7     def getname(self):
 8         return self.__name
 9 
10     def setname(self, name):
11         self.__name = name
12 
13     def getage(self):
14         return self.__age
15 
16     def setage(self, age):
17         if age < 0:
18             age = abs(age)
19         self.__age = age
20 
21 
22 p = Person("jack", 10)
23 # 获取值
24 r1 = p.getname()
25 print(r1)  # jack
26 # 修改值
27 p.setname("tom")
28 r2 = p.getname()
29 print(r2)  # tom
30 
31 p.setage(-19)
32 print(p.getage())  # 19

  二.继承