Python 面向对象

什么是面向对象编程?

面向对象编程是一种程序设计范式

对现实世界建立对象模型

把程序看作不同对象的相互调用

Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。下面我们将详细介绍Python的面向对象编程。

如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程。

接下来我们先来简单的了解下面向对象的一些基本特征。

面向对象技术简介

  • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

    定义类并创建实例
    
    在Python中,类通过 class 关键字定义。以 Person 为例,定义一个Person类如下:
    
    class Person():
    pass 按照 Python 的编程习惯,类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的。类的继承将在后面的章节讲解,现在我们只需要简单地从object类继承。 有了Person类的定义,就可以创建出具体的xiaoming、xiaohong等实例。创建实例使用 类名+(),类似函数调用的形式创建: xiaoming = Person()
    xiaohong = Person()

    注:python 2 创建类与python 3 不同

py 2.2 后继承 object 的目的是使这个类成为 new style class,
没有继承 object 的为传统 classic class,
在py 2.7.11进行了测试 >>> class A(object):
... pass
...
>>> print(type(A))
<type 'type'>
>>> class B():
... pass
...
>>> print(type(B))
<type 'classobj'>
# 可见2个type是不同的 >>> print dir(A)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
>>> print dir(B)
['__doc__', '__module__']
# 属性也是不一样的 而py 3.5.2:
class A(object):
pass
print(type(A))
print(dir(A)) class B():
pass
print(type(B))
print(dir(B)) <class 'type'>
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
<class 'type'>
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__'] 说明 py 3.5 object 已经作为默认基类被继承了(跟 java 一样).
  • 字段字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同。普通字段属于对象,静态字段属于.

    class Province:
    # 静态字段
    country = '中国'
    def __init__(self, name):
    # 普通字段
    self.name = name
    # 直接访问普通字段
    obj = Province('河北省')
    print(obj.name)
    # 直接访问静态字段
    print(Province.country)

    静态字段在内存中只保存一份,普通字段在每个对象中都要保存一份

  • 方法方法包括:普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。

  普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self;
          类方法:由类调用; 至少一个cls参数;执行类方法时,自动将调用该方法的类复制给cls;
          静态方法:由类调用;无默认参数;

#!/usr/bin/env python
# Version = 3.5.2
# __auth__ = '无名小妖' class Foo: def __init__(self, name):
self.name = name def ord_func(self):
""" 定义普通方法,至少有一个self参数 """
print('普通方法') @classmethod
def class_func(cls):
""" 定义类方法,至少有一个cls参数 """
print('类方法') @staticmethod
def static_func():
""" 定义静态方法 ,无默认参数"""
print('静态方法') # 调用普通方法
f = Foo('那么')
f.ord_func() # 调用类方法
Foo.class_func() # 调用静态方法
Foo.static_func()

尽量不要用对象执行静态方法和类方法。

   属性:Python中的属性其实是普通方法的变种。

class Foo:
def func(self):
pass
# 定义属性
@property
def prop(self):
print('xxx')
# ############### 调用 ###############
foo_obj = Foo() foo_obj.func()
foo_obj.prop #调用属性

由属性的定义和调用要注意一下几点:

    • 定义时,在普通方法的基础上添加 @property 装饰器;
    • 定义时,属性仅有一个self参数
    • 调用时,无需括号
                 方法:foo_obj.func()
                 属性:foo_obj.prop

注意:属性存在意义是:访问属性时可以制造出和访问字段完全相同的假象。

属性的定义有两种方式:

  • 装饰器 即:在方法上应用装饰器
  • 静态字段 即:在类中定义值为property对象的静态字段

装饰器方式:在类的普通方法上应用@property装饰器

#!/usr/bin/env python
# Version = 3.5.2
# __auth__ = '无名小妖' class Pager(): def __init__(self,all_count):
self.all_count = all_count
@property
def all_pager(self):
a1,a2 = divmod(self.all_count,10)
if a2 == 0:
x = a1
else:
x = a1 + 1
return x @all_pager.setter
def all_pager(self,value):
self.all_count = value * 10 @all_pager.deleter
def all_pager(self):
print('deleter') p = Pager(101)
print(p.all_pager)
p.all_pager = 123
print(p.all_pager)
del p.all_pager

输出结果:

11
123
deleter

静态字段方式,创建值为property对象的静态字段

  • 第一个参数是方法名,调用 对象.属性 时自动触发执行方法
  • 第二个参数是方法名,调用 对象.属性 = XXX 时自动触发执行方法
  • 第三个参数是方法名,调用 del 对象.属性 时自动触发执行方法
class Foo:

    def get_bar(self):
return 'xiaoyao1' # *必须两个参数
def set_bar(self, value):
print('set value is ' + value) def del_bar(self):
print('xiaoyao2') BAR = property(fget=get_bar, fset=set_bar, fdel=del_bar) obj = Foo() obj.BAR # 自动调用第一个参数中定义的方法:get_bar
x = obj.BAR
print(x)
obj.BAR = "alex" # 自动调用第二个参数中定义的方法:set_bar方法,并将“alex”当作参数传入
del obj.BAR # 自动调用第三个参数中定义的方法:del_bar方法 xiaoyao1
set value is alex
xiaoyao2

Python 三大特性:

封装

封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。

封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

__init__ 是封装必不可少的,看列子:

class Init():

    def __init__(self,name,age,gender):
self.Name = name
self.Age = age
self.Gender = gender obj1 = Init('xiao',15,'男')
obj2 = Init('yao',16,'女') print(obj1.Name)
print(obj2.Name)

这样实现了数据封装

xiao
yao

继承

继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

通过继承创建的新类称为“子类”或“派生类”。

被继承的类称为“基类”、“父类”或“超类”。

继承的过程,就是从一般到特殊的过程。

要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。

在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。

class C1():
def c1(self):
print('C1')
class C2(C1):
def c2(self):
print('C2')
class C3():
def c3(self):
print('C3')
def c1(self):
print('C3')
class C4(C2,C3):
def c4(self):
print('C4')
obj = C4()
obj.c1()
obj1 = C3()
obj1.c1()

输出结果:

C1
C3

可见,C4继承C2,C3,C2又继承C1,所以obj会有c1方法。

类的继承可以总结为:

1.左侧优先

class C4(C2,C3)  这里C2比C3优先

2.深度优先

上面例子C1和C3都有c1方法,但是最后C4继承的是C1的c1

3.有共同的父类,最后找父类

看图红色箭头表示继承关系,黑色箭头表示查找关系

图一:                                                                                                       图二:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfYAAAGwCAIAAADUiNCaAAAgAElEQVR4nO2dP28c19lH9xvI38EfQDDdCTCkNhABG7Bj2HJhKyDZpVAMFYYASoDVUYUKNqrMRkmpKAbYJoJbfQACagQEZGtgjARI8CLzFkOtlrzLuX9m9vfcP+fBFIZzfPdo5t7j1YreLPq+7/v+9PS0D56u63KAcdbAOGtgnDVwa86Lruu6rjs9Pe1KG5w1g7NmcNZMa86L6f+WsIJx1sA4a2CcNXBrziReCuOsgXHWwDhrYBJvqYGzRgNnjQbOGg0S7x+cNTDOGhhnDdyaM4mXwjhrYJw1MM4amMRbauCs0cBZo4GzRoPE+wdnDYyzBsZZA7fmTOKlMM4aGGcNjLMGJvGWGjhrNHDWaOCs0SDx/sFZA+OsgXHWwK05k3gpjLMGxlkD46yBSbylBs4aDZw1GjhrNEi8f3DWwDhrYJw1cGvOJF4K46yBcdbAOGvgSYnvuq5r7ws2rQZnzeCsGZw1M8WZd/FSGGcNjLMGxlkD80GNpQbOGg2cNRo4azRIvH9w1sA4a2CcNXBrzpkmfnd3d4sJnt3d3Ty3lxWMswbGWQNXmHjrZpY3eW4vKxhnDYyzBq428duLZ1zei8S7g7MGxlkDk/imLxLvDs4aGGcNTOKbvki8OzhrYJw1MIlv+iLx7uCsgXHWwCS+6YvEu4OzBsZZA5P4pi8S7w7OGhhnDUzim75IvDs4a2CcNTCJb/oi8e7grIFx1sAkvumLxLuDswbGWQNX+GXCJD4h8Rua3PZGyOCsGZw1U+GXCZP4hMRv6KHktjdCBmcNjLMG5oOapi8S7w7OGhhnDUzim75IvDs4a2CcNTCJb/oi8e7grIFx1sAkvumLxLuDswbGWQOT+KYvEu8OzhoYZw1M4pu+SLw7OGtgnDUwiW/6IvHu4KyBcdbAJL7pi8S7g7MGxlkDk/imLxLvDs4aGGcNTOKbvki8OzhrYJw1MIlv+iLx7uCsgXHWwCS+6YvEu4OzBsZZA5P4pi8S7w7OGhhnDTwp8afx03XdpmESn5D4DT2UqBHsjdkH52Q4anBOhqPm0sq8iy/+4l28OzhrYJw18BRnEl/8ReLdwVkD46yBSXzTF4l3B2cNjLMGLiHxYf8IiSfxs8A4a2CcNXAJiX/2rL91q3/0qP/HP0JWJvEkfgqMswbGWQMXkviPPz6/rm59bom///TDvl8M19nTH1f+px9fvln0b768b21I4tcOzhoYZw1cWuKvbn1Oif/j6/5CxO8//fD13rPtxbPD4/Pok/iJK+O8Ojhr4NacTRO/2vrvv+9//vm3s7PhnzJP/OHxoj/+4xiz9wmJn7gyzquDswZuzXla4vf2xsKddn3/ff/zzzdtE3/jy7P+w5c3RhkSP3llnFcHZw3cmvO0xM/e948/7v/0p/5vfzNO/N4nff/JoZch8dNWxnl1cNbArTnPkfgQePyDmps3h7Ln8kENiV+Z1o6EFYyzBm7N2TTxN2/2Dx/2f/+7u7Jx4vmgZmVaOxJWMM4auDVni8Q7ZXdXtv7j1h9fvrn0U5Ikfv6VcV4dnDVwa87CxF9ddndl68QPb+Qv/FDN4fFi+KFJEj/XyjivDs4auDXnRdd1XdcNX0EZO0PiQ8jfzs6iVrZP/OLZ+X/f9O4/fVr2/f3PxZ9fvk/tVYnf0KTtDdvBWTM4a2aKs+pdfOTKeSS+jIt38e7grIFx1sAlfFATuTKJJ/FTYJw1MM4amMQ3fZF4d3DWwDhrYBLf9EXi3cFZA+OsgUl80xeJdwdnDYyzBibxTV8k3h2cNTDOGpjEN32ReHdw1sA4a2AS3/RF4t3BWQPjrIFJfNMXiXcHZw2MswYm8U1fJN4dnDUwzhqYxDd9kXh3cNbAOGtgEt/0ReLdwVkD46yBSXzTF4l3B2cNjLMGJvFNXyTeHZw1MM4auIAvE44dEp+Q+A1Na1++ajU4a6Y1Z97FF3/xLt4dnDUwzhqYD2qavki8OzhrYJw1MIlv+iLx7uCsgXHWwCS+6YvEu4OzBsZZA5P4pi8S7w7OGhhnDUzim75IvDs4a2CcNTCJb/oi8e7grIFx1sAkvumLxLuDswbGWQOT+KYvEu8OzhoYZw1M4pu+SLw7OGtgnDUwiW/6IvHu4KyBcdbAJL7pi8S7g7MGxlkDk/imLxLvDs4aGGcNXG3imfDJc3tZwThrYJw1cIVfJnz37l3rZpY0d+/e3cRTGKa1L1+1Gpw105pzpu/iQ0b/b+OTk5OTk5MpK7f2DsIKxlkD46yBK/ygJmT0j+rg4ODg4GDKyq1tLysYZw2MswYm8TOvfBV8+/bt7e3tKSu3tr2sYJw1MM4amMTPvPJa+OTkZPjg+9JnNTk7zwLjrIFx1sCtOZP4UPjg4GBI/KXPanJ2ngXGWQPjrIFbcybxofDt27eHxF/6rCZn51lgnDUwzhq4NWcSHwQvP6VxP6vJ1nkuGGcNjLMGbs2ZxAfBy09p3M9qsnWeC8ZZA+OsgVtzJvFB8PJTGvezmmyd54Jx1sA4a+DWnEm8H770Kc0wy1fP03lGGGcNjLMGbs2ZxPvh58+fu4l//vx5wsqtbS8rGGcNjLMGJvEzr3wJ/uqrr9zEf/311wkrt7a9rGCcNTDOGpjEz7zyKnx6enrVl38NAhk6zwvjrIFx1sCtOZN4D7z2U5rVz2oydJ4XxlkD46yBW3NenMZP13XDXwyJD4SjVp59kjU+//zzqxL/xRdfxK4cNZu7dThrNHDWaOA8sjLv4sfg06s/pVl+VpOb8+wwzhoYZw3cmjOJj4CHrE9ZubXtZQXjrIFx1sAkfuaVSfzq4KyBcdbArTmT+AiYxBtq4KzRwFmjQeL9Q+I1MM4aGGcN3JoziY+ASbyhBs4aDZw1GiTePyReA+OsgXHWwK05k/gImMQbauCs0cBZo0Hi/UPiNTDOGhhnDdyaM4mPgEm8oQbOGg2cNRok3j8kXgPjrIFx1sCtOZP4CJjEG2rgrNHAWaNB4v1D4jUwzhoYZw3cmjOJj4BJvKEGzhoNnDUausR3Xdd13fCNibEzJD7hH5xl0pynzJD4KSvonacPzprBWTOtOfMuPgLmXbyhBs4aDZw1GjJnEh8Bk3hDDZw1GjhrNEi8f0i8BsZZA+OsgVtzJvERMIk31MBZo4GzRoPE+4fEa2CcNTDOGrg1ZxIfAZN4Qw2cNRo4azRIvH9IvAbGWQPjrIFbcybxETCJN9TAWaOBs0aDxPuHxGtgnDUwzhq4NWcSHwGTeEMNnDUaOGs0SLx/SLwGxlkD46yBW3Mm8REwiTfUwFmjgbNGg8T7h8RrYJw1MM4auDVnEh8Bk3hDDZw1GjhrNHSJ77qu48uEw4YvEy5lcNYMzpqZ4sy7+AiYd/GGGjhrNHDWaMicSXwETOINNXDWaOCs0SDx/iHxGhhnDYyzBm7NmcRHwCTeUANnjQbOGg0S7x8Sr4Fx1sA4a+DWnEl8BEziDTVw1mjgrNEg8f5p7VFZwThrYJw1cGvOJF4K46yBcdbAOGtgEj/zyjivDs4aGGcN3JoziZfCOGtgnDUwzhqYxM+88jr47dGdrfO5c/Q2deXWtpcVjLMGxlkDk/iZV3bgt0d33nf91f6FyufqPBuMswbGWQO35kzi4+FX+1tb+6+SVm5te1nBOGtgnDUwiZ95ZX/ieRcv18BZo4GzRkOX+K7rOr5MeHQu3sC3R3fOC5+wlMx5xsFZMzhrpjVn3sXHwZc+iI9dubV3EFYwzhoYZw3MBzUzr3wV7PY9duXWtpcVjLMGxlkDk/iZV14Lr+177MqtbS8rGGcNjLMGJvEzr+zCF3+IJn3l1raXFYyzBsZZA5P4mVe+DL/a37o8/NCkWgNnjQbOGg0S75/WHpUVjLMGxlkDt+ZM4qUwzhoYZw2MswYm8TOvfBXM/yWIoQbOGg2cNRok3j8kXgPjrIFx1sCtOZP4CJjEG2rgrNHAWaNB4v1D4jUwzhoYZw3cmjOJj4BJvKEGzhoNnDUaJN4/JF4D46yBcdbArTmT+AiYxBtq4KzRwFmjoUv8afx0XTf8xZD4QDhq5dlnFo0h8VNWjprN3TqcNRo4azRwHlmZd/ERMO/iDTVw1mjgrNHggxr/kHgNjLMGxlkDt+ZM4iNgEm+ogbNGA2eNBon3D4nXwDhrYJw1cGvOJD4CJvGGGjhrNHDWaJB4/5B4DYyzBsZZA7fmTOIjYBJvqIGzRgNnjQaJ9w+J18A4a2CcNXBrziQ+Aibxhho4azRw1miQeP+QeA2MswbGWQO35kziI2ASb6iBs0YDZ40GifcPidfAOGtgnDVwa84kPgIm8YYaOGs0cNZoFJX4gq69vYR7tBwSb6iBs0YDZ42GLvFd13Vdd3p62sXP//3hD/bVjrwSfpnLGRI/ZYW0+2w7OGsGZ8205jztXbwpHO0c8LHSuAbv4g01cNZo4KzRkDmT+AgNEm+ogbNGA2eNBon3D4nXwDhrYJw1cGvOJD5Cg8QbauCs0cBZo0Hi/UPiNTDOGhhnDdyaM4mP0CDxhho4azRw1miQeP+QeA2MswbGWQO35kziIzRIvKEGzhoNnDUaJN4/JF4D46yBcdbArTmT+AgNEm+ogbNGA2eNBon3D4nXwDhrYJw1cGvOJD5Cg8QbauCs0cBZo0Hi/UPiNTDOGhhnDdyaM4mP0CDxhho4azRw1mjoEt91XdfGF2zyZcJpg7NmcNZMa868i4/Q4F28oQbOGg2cNRoyZxIfoUHiDTVw1mjgrNEg8f4h8RoYZw2MswZuzZnER2iQeEMNnDUaOGs0SLx/SLwGxlkD46yBW3Mm8REaJN5QA2eNBs4aDRLvHxKvgXHWwDhr4NacSXyEBok31MBZo4GzRoPE+4fEa2CcNTDOGrg1ZxIfoUHiDTVw1mjgrNEg8f4h8RoYZw2MswZuzZnER2iQeEMNnDUaOGs0SLx/SLwGxlkD46yBW3PONPG7u7tbTPDs7u7mub2s4JqcOQtRs7u7m3afpz/BPPdzpl8mbL1PypvNPYvc9kbI1ORsvbPKm7T7nPNMcc70XfzwqLYXz7i813Jbb+ih5LY3QqYmZ85C7FlIu8/Tn2Ce+5nEF3+ReHdqcuYsxJ6FtPs8/QnmuZ9JfPEXiXenJmfOQuxZSLvP059gnvuZxBd/kXh3anLmLMSehbT7PP0J5rmfSXzxF4l3pyZnzkLsWUi7z9OfYJ77mcQXf5F4d2py5izEnoW0+zz9Cea5n0l88ReJd6cmZ85C7FlIu8/Tn2Ce+5nEF3+ReHdqcuYsxJ6FtPs8/QnmuZ9JfPEXiXenJmfOQuxZSLvP059gnvuZxBd/kXh3anLmLMSehbT7PP0J5rmfSXzxF4l3pyZnzkLsWUi7z9OfYJ77mcQXf5F4d2py5izEnoW0+zz9Cea5n0l88ReJd6cmZ85C7FlIu8/Tn2Ce+5nEF3+ReHdqcuYsxJ6FtPs8/QnmuZ8Xp/HTdd2mYbZ17Lbe3EOJGsHemH0yd+YsxJ6F6fd8OZnvjZCVeRdf/MW7eHdqcuYsxJ6FtPs8/QnmuZ9JfPEXiXenJmfOQuxZSLvP059gnvuZxBd/kXh3anLmLMSehbT7PP0J5rmfSXzxF4l3pyZnzkLsWUi7z9OfYJ77mcQXf5F4d2py5izEnoW0+zz9Cea5n0l88ReJd6cmZ85C7FlIu8/Tn2Ce+5nEF3+ReHdqcuYsxJ6FtPs8/QnmuZ9JfPEXiXenJmfOQuxZSLvP059gnvuZxBd/kXh3anLmLMSehbT7PP0J5rmfSXzxF4l3pyZnzkLsWUi7z9OfYJ77mcQXf5F4d2py5izEnoW0+zz9Cea5n0l88ReJd6cmZ85C7FlIu8/Tn2Ce+5nEF3+ReHdqcuYsxJ6FtPs8/QnmuZ9Vif/116iV2dax2zrP7WUF1+TMWYg9C3H3eTRNme+NkJUXXdd1XTd8BeXm5j8//PC/a9f++803//7LX0J4tnXstt7cs9v03tjE1OTMWZj3LAz3+d9//vN/v/nmf9eu/eeHH2Z/lLPPlP2sehf/8GG/WJxfH3zQf/dd/9e/jqycyba+//Re3+8N19nTw3d///Dlm/O/2b95fN9aknfx7tTkXMxZOH5iLul/F//ixb++/LL/4IP3OXr4cK4nmOd+tkj81a3PKfFPXl8s+P2n917vDXv63ssb53/z8Ni+8iTenZqcMz4Lzw6Pl2fhyesL6bc8C2tu4osX/XffXSg7iQ9fIghem/jV1n/2WX909Ns//zn8U+bb+vA47F3J3oO+f3CYwbbOc3tZwTU5l3IWDo8zS/yvv/ZHR/1nn60vO4kPWuLWrbF7l3Z99ll/dHTz+nXLbX3j8Vn//q362LX3gHfxySvjvDqZJj7wLIQfmQ2fhZvXr5+XffY03bqV294IWXla4me/iYtF/+mn/U8/GSc+9L354cs3ubxzyXN7WcE1ORsn3nMWnrw+/4De+Peyy7Nw8/r1/qef+k8/3UidMtsbISvPkfgQePyDmmvXhrLn8kFNWOJz+CB+m8Svm5qcizgL2zcen+X2Wfyvv563/tq1sfgEflBD4j3w2sRfu9Z/+23/4oW7cv6/Oc2k79skft3U5Jz/WRiu+0/vmZ+IsT9u/fbb9a0n8WNLpCXeKbu7svUfMXk+gcmn79skft3U5Jz5WVheWSd+OS9e/Ov3v7/QehI/tkRU4q8uu7uy9bY+/43n6g8SHB7vvftBsSx+BPjSts5ze1nBNTlnfBaevH7f9Lx/aNK9z8v39SR+bInwX3aRX2Cw8p919Od93957sPw7fR5/0ETi3anJOd+zcPE4vP+b1mch7j4HfoEBiQ98vUA4j21dxkXi3anJmbMQexbS7rPnCZL4wNcLhNnWsds6z+1lBdfkzFmIPQtp99nzBEl84OsFwmzr2G2d5/aygmty5izEnoW0++x5giQ+8PUCYbZ17LbOc3tZwTU5cxZiz0LaffY8wXIT33Vdl/pllcMvO+Ef9A7bOnZbb+IpDFPTF/PmPHyZsOYs5Na6kLH7MmHexWdw8S7enZqcOQuxZyHtPnueYLnv4ictQeIzuEi8OzU5cxZiz0LaffY8QRIf+HqBMNs6dlvnub2s4JqcOQuxZyHtPnueIIkPfL1AmG0du63z3F5WcE3OnIXYs5B2nz1PkMQHvl4gzLaO3dZ5bi8ruCZnzkLsWUi7z54nSOIDXy8QZlvHbus8t5cVXJMzZyH2LKTdZ88TJPGBrxcIs61jt3We28sKrsmZsxB7FtLus+cJkvjA1wuE2dax2zrP7WUF1+TMWYg9C2n32fMESXzg6wXCbOvYbZ3n9rKCa3LmLMSehbT77HmCJD7w9QJhtnXsts5ze1nBNTlzFmLPQtp99jxBEh/4eoEw2zp2W+e5vazgmpw5C7FnIe0+e54giQ98vUCYbR27rfPcXlZwTc6chdizkHafPU+QxAe+XiDMto7d1nluLyu4JmfOQuxZSLvPnidI4gNfLxBmW8du6zy3lxVckzNnIfYspN1nzxMsN/Fd13X5fcEm2zp2W2/iKQxT0xfz5jx8mbDmLOTWupDhy4SbvngX705NzpyF2LOQdp89T7Dcd/GTliDxGVwk3p2anDkLsWch7T57niCJD3y9QJhtHbut89xeVnBNzpyF2LOQdp89T5DEB75eIMy2jt3WeW4vK7gmZ85C7FlIu8+eJ0jiA18vEGZbx27rPLeXFVyTM2ch9iyk3WfPEyTxga8XCLOtY7d1ntvLCq7JmbMQexbS7rPnCZL4wNcLhNnWsds6z+1lBdfkzFmIPQtp99nzBEl84OsFwmzr2G2d5/aygmty5izEnoW0++x5giQ+8PUC4S0mcvLcXlZwTc7WO6u8SbvPnidI4gNfLxDe2dmx3iclzc7OTp7bywquyZmzEDU7Oztp99nzBEl84OvNCOuP8cnJycnJyZSVa0qPWANnjUYgPJyFspyHaa11JD4CPjg4ODg4mLJyQ0fCFMZ50/BwFspyHqa11pH4CPj27dvb29tTVm7oSJjCOG8aHs5CWc7DtNY6Eh8Kn5ycDB/2XfqsJmfnWWCcNXBBzsuz8MsvvxhqpMGttW5xGj9d1w1/MfyyA+GolWef6RqPHj0atvWjR4+SV46azd06nDUatTpfdRbEGmlw1FTQOt7Fh8K3b98etvWlz2pydp4FxlkDF+S8PAu/+93vDDXS4NZaR+KD4OXvTN3ParJ1ngvGWQOX4jxyFpQayXBrrSPxQfDBwcHqtl79uZpsneeCcdbApTiPnAWlRjLcWutIfBC8/J2p+1lNts5zwThr4FKcR86CUiMZbq11JN4PX/qd6TDLV8/TeUYYZw1chPP4WZBpTIFbax2J98PPnz93t/Xz588TVi7iGF8anDVwEc7jZ0GmMQVurXUk3g9/9dVX7rb++uuvE1Yu4hhfGpw1cBHO42dBpjEFbq11JN4Dn56eunt69fenGTrPC+OsgfN39p4FjcZEuLXWkXgPvPZ3pqu/P83QeV4YZw2cv7P3LGg0JsKttY7Ee+C1vzNd/f1phs7zwjhr4PydvWdBozERbq11JH4MHvmd6fL3p7k5zw7jrIEzdw45C7k5r53WWkfiI+BhK09ZOfNjvHZw1sBlOQdmfdMaCXBrrSPxETCJN9TAWaNB4tevXGzrSHwETOINNXDWaJD49SsX27pF13Vd1w2fKcfO8MtO+AdnmTTnKTNs6ykr6J2nD86aKct59c+iyprWWse7+AiYd/GGGjhrNAJh3sVP1JDtDRIfAZN4Qw2cNRokfv3KxbaOxEfAJN5QA2eNBolfv3KxrSPxETCJN9TAWaNB4tevXGzrSHwETOINNXDWaJD49SsX2zoSHwGTeEMNnDUaJH79ysW2jsRHwCTeUANnjQaJX79ysa0j8REwiTfUqN45asydSfxEDRLvHxKvgXHWwFFj7kziJ2qQeP+QeA2MswaOGnNnEj9Rg8T7h8RrYJw1cNSYO5P4iRok3j8kfib47dGdra07R2+vgLN09kxpzm+P7mydz/4rO40ImMRP1CDx/iHx0+FX++/KQuLt4Ff7y7v/an/sUWxWIwom8RM1SLx/SPxs8Kt9Em8ODzP6KBQaJH79ysW2ji8Tjpituub9LrjYFWuveeajjz6yVgiaC6fz7dGdd0/C2ito+DJhzfBlwjOvfBW8v7/v3/XlzPtfWI2JL2XePYBh3n8SbyoVNPv7+7yLT9aQtY7ES+FMnWv8oGbIkK1GFNz33j/5VmjUsJ9Hp7XWkXgpnKkzid+MRnTiL3xUY6NRw34endZaR+KlcKbOJH4zGiReo0HiR1Ym8VI4U2cSvxmNMHjlZybL+aHJYQrdGykrF9s6Ei+Fc3N+dfnPj9f8hze5OYdMUYm/8BjC/sunDJz7vi92b6SsXGzrSLwUxlkDF5b4+MnEudC9kbJysa0j8VIYZw1M4jVwoXsjZeViW0fipTDOGrjExBd6n3PQIPEjK5N4KYyzBibxGrgh52JbR+KlMM4amMRr4Iaci20diZfCOGtgEq+BG3IutnUkXgrjrIFJvAZuyLnY1pF4KYyzBibxGrgh52Jbx5cJSwdnzSwTby0SMYXeZ2uF6GmtdbyLl8I4a2DexWvghpyLbR2Jl8I4a2ASr4Ebci62dSReCuOsgUm8Bm7IudjWkXgpjLMGJvEauCHnYltH4qUwzhqYxGvghpyLbR2Jl8I4a2ASr4Ebci62dSReCuOsgUm8Bm7IudjWkXgpjLMGJvEauCHnYltH4qUwzhqYxGvghpyLbR2Jl8I4a2ASr4Ebci62dSReCuOsgUm8Bm7IudjWkXgpjLMGJvEauCHnYltH4qUwzhqYxGvghpyLbR2Jl8I4a2ASr4Ebci62dYvT+Om6bviL4ZcdCEetPPtsTgNnjUas85B4W40W7nMOGgLnclvHu3gpjLMGPuVdvARuyLnY1pF4KYyzBibxGrgh52JbR+KlMM4amMRr4Iaci20diZfCOGtgEq+BG3IutnUkXgpX6by7u7vFBM/u7m7afU5+guzn1WmtdSReClfpbN3M8ibtPic/Qfbz6rTWOhIvhat0HrK1vXjG5b1IvDncWutIvBSu0pnEk3hbDRI/sjKJl8JVOpN4Em+rQeJHVibxUrhKZxJP4m01SPzIyiReClfpTOJJvK0GiR9ZmcRL4SqdSTyJt9Ug8SMrk3gpXKUziSfxthokfmRlEi+Fq3Qm8STeVoPEj6y86Lqu67rhKyhjZ/hlJ/yDs0yas+1U6UziYxOfdp8znHacy20d7+KlcJXOJD428Wn3OfkJsp9Xp7XWkXgpXKUziSfxthokfmRlEi+Fq3Qm8STeVoPEj6xM4qVwlc4knsTbapD4kZVJvBSu0pnEk3hbDRI/sjKJl8JVOpN4Em+rQeJHVibxUrhKZxJP4m01SPzIyiReClfpTOJJvK0GiR9ZmcRL4SqdSTyJt9Ug8SMrk3gpXKUziSfxthokfmRlEi+Fq3Qm8STeVoPEj6xM4qVwlc4knsTbapD4kZVJvBSu0pnEk3hbDRI/sjKJl8JVOpN4Em+rQeJHVubLhKVTpTOJj0182n3OcNpxLrd1vIuXwlU6k/jYxKfd5+QnyH5endZaR+KlcJXOJJ7E22qQ+JGVSbwUrtKZxJN4Ww0SP7IyiZfCVTqTeBJvq0HiR1Ym8VK4SmcST+JtNUj8yMokXgpX6UziSbytBokfWZnES+EqnTNJ/P2n9/p+b7jOnh5e+l8Pj/f6/t7LGyR+Trgh52JbR+KlcJXOGST+yet+r3/z+P5K7l/vXaz/m3tnJH5uuCHnYltH4qVwlc7miT883uuPn1wJ3Hh81j84vPGYxM8ON+RcbOvmSDxX25dx4j3tPnz55t7LG15Mm3jrR8aVeMW0dUbYLvE3b9rfdC7ryzjxew/6/sHhFf/r4fG7z+VJPNfE6+bNqLbOCNsl3hTGWQPn/kHNSOL3Hrz/gD6rxCfd5+QnyAteOvsAAALTSURBVH5endacSbwUrtI51w9qDl++2Vv+jM3yWv1jWBI/EcZZA5N4Sw2crf+49fDlmzU/JRn8bwISnw7jrIHNvkzYdnDWTAFfJnzj8Vl/4YdqDo+dd+s5JT7tPmc4OGvG7suETWGcNXD27+KH68LHMms+jckp8Wn3OfkJsp9XpzVnEi+Fq3TOI/FlXCTeHG7NmcRL4SqdSTyJt9XAeWRlEi+Fq3Qm8STeVgPnkZVJvBSu0pnEk3hbDZxHVibxUrhKZxJP4m01cB5ZmcRL4SqdSTyJt9XAeWRlEi+Fq3Qm8STeVgPnkZVJvBSu0pnEk3hbDZxHVibxUrhKZxJP4m01cB5ZmcRL4SqdSTyJt9XAeWRlEi+Fq3Qm8STeVgPnkZVJvBSu0pnEk3hbDZxHVibxUrhKZxJP4m01cB5ZeXEaP13X5QBHDc7JsHdIfGzip9/zUvaGRgPnkZV5Fy+Fq3Qm8bGJT7vPyU+Q/bw6rTmTeClcpTOJJ/G2GjiPrEzipXCVziSexNtq4DyyMomXwlU6k3gSb6uB88jKJF4KV+lM4km8rQbOIyuTeClcpTOJJ/G2GjiPrEzipXCVziSexNtq4DyyMomXwlU6k3gSb6uB88jKJF4KV+lM4km8rQbOIyuTeClcpTOJJ/G2GjiPrEzipXCVziSexNtq4DyyMomXwlU6k3gSb6uB88jKJF4KV+lM4km8rQbOIyuTeClcpTOJJ/G2GjiPrLzouq7ruuErKMsanDXjdd5iIiftPmc4OGtmijPv4qVwlc47OzvWzSxpdnZ20u5z8hNkP69Oa84kXgrjrIFx1sA4a2ASb6mBs0YDZ40GzhoNEu8fnDUwzhoYZw3cmjOJl8I4a2CcNTDOGpjEW2rgrNHAWaOBs0aDxPsHZw2MswbGWQO35kzipTDOGhhnDYyzBibxlho4azRw1mjgrNEg8f7BWQPjrIFx1sCtOf8/h+eb4Gr56swAAAAASUVORK5CYII=" alt="" />        aaarticlea/png;base64,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CSdIvinYv5tR9ifxSVvnJpg0GTbbufZ59Jfsm4L9u4mclvv379c+DJ5y//79tHVugkmTYbOdmaBRWZ4g+aZg/27MTktP5p0PDw8PDw9r1Vifda5bg87laixOkJfOyTD278brLoYQQtjb29vb26tVY33WuW4NOpersThBXjonw9i/G6+7GEII4fr16zdu3KhVY33WuW4NOpersThBXjonw9i/G6+7GMLh4WHzEmH/iz+mOlevQWedGi46dybIRWcJjP278bqLIezt7TVnt//FH1Odq9egs04NF507E+SiswTG/t143cUQrl+/3pzd/hd/THWuXoPOOjVcdO5MkIvOEtiW/bNnbv/4NO846itHR0dv3rxZ/PmwN2/e1C41EKfrXLvC6NA5MsIJcrrOCYYsEZ790+Gjo6P5F62DL/7Y6WyhBp11atjvvDxB9jsLYVvP/vnvvjb2n3/ROvjij53OFmrQWaeG/c7LE2S/sxDG/t143MUff/xx+S8HnvcHMdLZ4zrTWQfW7zz/aZ/F/PLLL/F39rrO2H8xHnfxu+++Wz67z58/V64x+XWmsw6s3/n58+fLE/T06dP4O3tdZ+y/GI+7+MUXXyyf3a+++kq5xuTXmc46sH7nra2t5Qn68ssv4+/sdZ2x/2Lc7eLR6T+QHfnij4XOweE6Bzprwcqdx07QynhdZ+y/GHe7uPKL1p4Xfyx0Dg7XOdBZC1buPHaCVsbrOmP/xbjbxZVftPa8+GOhc3C4zoHOWrBy57ETtDJe1xn7L8bXLvZ80Xrel67VOzfxtc5N6KwDa3ZOmKDqnXPB2L8br7sYQjj995Jq1Vifda5bg87laixOkJfOyTD278brLoYQsH9hmM46MPbXgbF/N153MYSA/QvDdNaBsb8OjP278bqLIQTsXximsw6M/XVg7N+N110MIWD/wjCddWDsrwPbsn/2rM87PDcfNGe3apfYuF5nR6HzqCRPkNN15h2eW/H6OTyEwLN/YZjOOjDP/jqwrWf//HfH/oo11med69agc7ka2F+/BvYXwdhfB6azDoz9dWDs343XXQwhYP/CMJ11YOyvA2P/brzuYggB+xeG6awDY38dGPt343UXQwjYvzBMZx0Y++vA2L8br7sYQsD+hWE668DYXwfG/t143cUQAvYvDNNZB8b+OjD278brLoYQsH9hmM46MPbXgbF/N153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" alt="" />

3.多态

多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代 码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调 用。
 
Pyhon不支持多态并且也用不到多态,多态的概念是应用于Java和C#这一类强类型语言中
 

循序渐进Python3(七) --1-- 面向对象的更多相关文章

  1. Python3 与 C# 面向对象之~继承与多态 Python3 与 C# 面向对象之~封装 Python3 与 NetCore 基础语法对比(Function专栏) [C#]C#时间日期操作 [C#]C#中字符串的操作 [ASP.NET]NTKO插件使用常见问题 我对C#的认知。

    Python3 与 C# 面向对象之-继承与多态   文章汇总:https://www.cnblogs.com/dotnetcrazy/p/9160514.html 目录: 2.继承 ¶ 2.1.单继 ...

  2. 循序渐进Python3(七) -- 2-- 面向对象进阶

    面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实 ...

  3. python3.x 基础七:面向对象进阶

    类的高级方法: 1.静态方法:在类方法前增加关键字@staticmethod,将普通方法变成静态方法,不能再次传值,不能访问实例变量或者类变量,与类的关系仅仅是通过类名进行调用 2.类方法:在类方法前 ...

  4. python自动化开发-[第七天]-面向对象

    今日概要: 1.继承 2.封装 3.多态与多态性 4.反射 5.绑定方法和非绑定方法 一.新式类和经典类的区别 大前提: 1.只有在python2中才分新式类和经典类,python3中统一都是新式类 ...

  5. Python3 系列之 面向对象篇

    面向对象的三大特性:继承.封装和多态 Python 做到胶水语言,当然也支持面向对象的编程模式. 封装 class UserInfo(object): lv = 5 def __init__(self ...

  6. python3.x Day5 面向对象

    类:类是指:对具有相同属性的事物的抽象.蓝图.原型.在类中定义了这些事物都具备的属性和共同的方法. 对象:一个对象就是一个类实例化以后的实例,一个类必须经过实例化后才能在程序中被使用,一个类可以实例化 ...

  7. 循序渐进Python3(十一) --2-- web之javascript

      JavaScrip                JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之后 ...

  8. 循序渐进Python3(十)-- 2 -- SqlAlchemy

    ORM             对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类 ...

  9. 循序渐进Python3(八) -- 0 -- 初识socket

    socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Un ...

随机推荐

  1. mysql操作汇集

    1.修改root密码 cmd进如mysql的bin目录 >mysql -u root -p Enter password: ****** mysql> use mysql; mysql&g ...

  2. iOS中如何让TextView和TextField控件支持return键收起输入法

    TextView和TextField控件是iOS中负责接收用户输入的控件,那当用户输入完成时怎么收起面板呢? 1.TextView和TextField控件获得焦点之后的第一反应就是弹出输入法面板: 2 ...

  3. spring mvc 和 velocity整合

    java.lang.ClassNotFoundException: org.springframework.ui.velocity.VelocityEngineFactory 考虑是不是没有添加spr ...

  4. TIOBE Index for December 2015(转载)

    There is hardly any doubt about it, Java will become TIOBE's programming language of the year 2015. ...

  5. docker跨容器之使用link大法通信

    容器1 docker run --name elixir -it edib/elixir-phoenix-dev /bin/bash ip address看看自己的ip 容器2 docker run ...

  6. linux 下 文件权限和文件主

    文件与文件夹的权限和所有者 1.chmod -R 755 file 777 含义与来源: 777含义:分别为:所有者.同组用户.其他用户 7的来源:文件有三种操作模式:读4.写2.执行1,分别值为42 ...

  7. activiti自定义流程之整合(六):获取我的申请任务

    流程启动后,流程节点便进入到了任务相关的部分.可以看到我之前的做法是在启动节点就绑定了form表单,启动时就填写相关的数据.实际上在之前我的做法是不对开始节点做任何操作,知道任务节点的时候再填写相关的 ...

  8. ztree

    http://www.s u c h s o.com/projecteactual/ztree-jiaocheng-mvc-checkbox-quanxuan-demo-down.html http: ...

  9. WWDC2014之iOS使用动态库 framework【转】

    from:http://www.cocoachina.com/industry/20140613/8810.html JUN 12TH, 2014 苹果的开放态度 WWDC2014上发布的Xcode6 ...

  10. nodejs生成UID(唯一标识符)——node-uuid模块

    unique identifier 惟一标识符        -->> uid 在项目开发中我们常需要给某些数据定义一个唯一标识符,便于寻找,关联. node-uuid模块很好的提供了这个 ...