循序渐进Python3(七) --1-- 面向对象
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,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" alt="" /> aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAf8AAAIsCAIAAABz0Tf1AAAgAElEQVR4nO2dsW8VWZq3739gMsLdlGCXFZ1ZrW5SBiSQOmg3HQASdro7nZFA5MgtDSJo9QQDTvCE9CTkqEW2dKf+mpFASN5oR0gOWurR7JwvKPv6Vt3rqlPnPec971v3+amk8cLTtT/OOe/j8rW5zI6Pj0N0ysFHR0cWatBZpwaddWrQWaeG084zViQZprMOTGcdmM46sJ3O2D8dprMOTGcdmM46sJ3O2D8dprMOTGcdmM46sJ3O2D8dprMOTGcdmM46sJ3O2D8dprMOTGcdmM46sJ3O2D8dprMOTGcdmM46sJ3Os2MbOTo6ql1hdOisEzrrhM46sdOZZ/90mM46MJ11YDrrwHY6Y/90mM46MJ11YDrrwHY6Y/90mM6D8Pb29hUSne3tbYVNOS+cZx3YTmfsnw7TeRCurVN/UdiU88J51oHtdMb+6TCdB+HGaJ/MdrgGL+yfANNZAmP/dJjOgzD2x/5FYTpLYOyfDtN5EMb+2L8oTGcJjP3TYToPwtgf+xeF6SyBsX86TOdBGPtj/6IwnSUw9k+H6TwIY3/sXxSmswTG/ukwnQdh7I/9i8J0lsDYPx2m8yCM/bF/UZjOEhj7p8N0HoSxP/YvCtNZAmP/dJjOgzD2x/5FYTpLYN7hOT10Hgz2H2t/zd3phPOsEzudefZPh+k8CGP/sfZX2JTzwnnWge10xv7pMJ0HYeyP/YvCdJbA2D8dpvMgjP2xf1GYzhIY+6fDdB6EsT/2LwrTWQJj/3SYzoMw9sf+RWE6S2Dsnw7TeRDG/ti/KExnCYz902E6D8LYH/sXheksgbF/OkznQRj7Y/+iMJ0lMPZPh+k8CGN/7F8UprMExv7pMJ0HYeyP/YvCdJbA2D8dpvMgjP2xf1GYzhIY+6fDdB6EsT/2LwrTWQJj/3SYzoMw9sf+RWE6S2Dsnw7TeRDG/ti/KExnCTw7Pj4+ik45eFTonAyPirwG9h9rf4VNyZL1PM9Z4FEp2pln/3SYzoMw9h9rf4VNOS+cZx3YTmfsnw7TeRDG/ti/KExnCYz90+F17Pzx46ga2L+s/d+9G72D52cdz3MN2E5n7J8Or2PnR4/ChQvh7t3www8xNbB/Efu/excePw7/8R9hNhu9g+dnHc9zDdhOZ+yfDq9j50ePwmx2crU/DVi2/73HF0OYNdeHx1sLv7V18HYW3m7eq90wyv7v3oXHj//v3//9bAuwP50FMPZPh9ex86L9258Gfv3zn5fvYMD+116Hlt/vPb74emfnk9nO7suTzwfW7f/zz+G//iv867+uWHnsT2cBjP3T4XXsvNL+i58Gbt0K+/vzbw9Ut//uy1l4ea2P2blk1P790sf+IQQ6y2Dsnw6fdb56dWBE1/C6dSvs739++XJN+29ufggXDzZ7GWv2j5Q+V8914UL4+WdNFTh1HfZPh886Vz/uBq+bN8OzZ5Xtv3MphEu7g4w1+//nf4Z/+Zf6O+j6evRIUwVOXYf90+Gu/SvVMPTKz8ZGI30rr/x4tP88kZ8Gxu7g+fE9g/M0RxT7R8DYPx3G/mfSv3Pn14OD5TtUtr/HV36W0/9pYOwOnh/fMzgP9o+GsX86vO7239gId+6EFy96atT+ru/WwdvOj3g6tP88796FP/zh//7t37D/PNhfAmP/dHhN7d+Wfn+N2vZvHv9bP/az+3LW/MSnP/vP1/ndu/CHP4TLl7E/9pfA2D8dXkf7u3ynh62Dt7P53/aaq//s5/1PrqHvENix/zy80wP2F8CzYxtp3nHUV+adG/vXLRMZ5XW2YX8fV7NWmrvTiesZnOe3Bw/CbPbbgwdV+sTEzjrz7J8Or+Oz/0gY+4+1v8KmnBffMzgPz/7RMPZPh7H/IIz9sX9RGPtLYOyfDmP/QRj7Y/+iMPaXwNg/Hcb+gzD2x/5FYewvgbF/Ooz9B2Hsj/2LwthfAmP/dBj7D8LYH/sXhbG/BMb+6TD2H4SxP/YvCmN/CYz902HsPwhjf+xfFMb+Ehj7p8PYfxDG/ti/KIz9JTD2T4ex/yCM/bF/URj7S2Dsnw5j/0EY+2P/ojD2l8DYPx3G/oMw9sf+RWHsL4GxfzqM/Qdh7I/9i8LYXwJj/3QY+w/C2B/7F4WxvwS28r7Edt71ND68w/NgsP9Y+2vuTieuZ3Ae3uE5Pjz7p8M8+w/C2H+s/RU25bz4nsF5ePaPhrF/Ooz9B2Hsj/2LwthfAmP/dBj7D8LYH/sXhbG/BMb+6TD2H4SxP/YvCmN/CYz902HsPwhjf+xfFMb+Ehj7p8PYfxDG/ti/KIz9JTD2T4ex/yCM/bF/URj7S2Dsnw5j/0EY+2P/ojD2l8DYPx3G/oMw9sf+RWHsL4GxfzqM/Qdh7I/9i8LYXwJj/3QY+w/C2B/7F4WxvwTG/ukw9h+EsT/2LwpjfwmM/dNh7D8IXyEjo7Ap58X3DM6D/aNh7J8OY/9B+P79+7V16in3799X2JTz4nsG58H+0bCV9yW2866n8eEdnnWSvfObN2/evHmT956dsM464R2eJeHZPx3m2V8Hzt55b29vb29vbA3WWaeGtDPP/tEw9k+Hsb8OnL3z9evXb9y4MbYG66xTA/vr1MD+Ihj768B5Ox8eHjYvsh8eHnrprANPpDP2j4axfzqM/XXgvJ339vYa++/t7XnprANPpDP2j4axfzqM/XXgvJ2vX7/e2P/GjRteOuvAE+mM/aNh7J8OY38dOGPn+cs+Td68eZPrzp2s+TqrwdhfAmP/dBj768AZO89f9mmyu7ub686drPk6q8HYXwJj/3QY++vAGTvPX/Zp8rvf/S7XnTtZ83VWg7G/BMb+6TD214Fzde687NMk/uass04N7K9TA/uLYOyvA+fq/Pz582X7P3/+XH7n5azzOmvC2F8CY/90GPvrwLk6b21tLdv/q6++kt95Oeu8zpow9pfA2D8dxv46cJbOR0dH5723WuT9WWedGthfpwb2F8HYXwfO0nnlyz6jXvxhnXVqYH+dGthfBGN/HThL55Uv+4x68Yd11qmB/XVqnNj/KDrl4FGx1rmxf60a67POyXf+6aefzlN/k59++intzlkymXXWh1f85998E2az42++0azhdJ159k+Hj3j2V4Gzd26MP7YG66xTg2d/nRrYXwRjfx0Y++vAE+mM/aNh7J8OY38dGPvrwBPpjP2jYeyfDmN/HRj768AT6Yz9o2Hsnw5jfx0Y++vAE+mM/aNh7J8OY38dGPvrwBPpjP2jYeyfDmN/HRj768AT6Yz9o2Hsnw5jfx0Y++vAE+mM/aNh7J8OY38dGPvrwBPpjP2jYeyfDmN/HRj768AT6Yz9o2Hsnw5jfx0Y++vAE+mM/aNh7J8OY38dGPvrwBPpjP2jYeyfDmN/HRj768AT6Yz9o2Hsnw5jfx0Y++vAE+mM/aPh2bGNNO846ivzzo3965aJjOt1zpXG/nnv2UnRde6ZZ0mmcTZ+e/AgzGa/PXhQpU9M7Kwzz/7pMM/+OjDP/jrwRDrz7B8NY/90GPvrwNh/GX6/f3vxX6e5vf9efueJnA3sHw1j/3QY++vA2H8Zfr9/+1zlp955ImcD+0fD2D8dxv46MPZfhrF/E+wvgbF/Ooz9deBC9v/jH//45MmTP0ZnFPztt98WuvOTJ0/COfYX3rlo50HmL3/5S56zgf2jYeyfDmN/HTh7588++6z/H3k3ntB53f/hq+bPVa9RnuQ5G9g/Gsb+6TD214Gzdz48PPz++++///77J0+efB+dUfDe3l6hOzfP/gt59fDKyScA4Z2Ldu4HsL9+DewvgrG/DkznAfjVw7Pnf8GdK64z9tevgf1FMPbXgek8AL96eN53gO12bgf769fA/iIY++vAdF6C3+/fnj/sv3ro/+f9sb9+DewvgrG/DkznFfDCt317fvLTVufzg/31a2B/EYz9dWA668DYXwe2czawfzqM/XVgOuvA2F8HtnM2sH86jP11YDrrwNhfB7ZzNqy8L7Gddz2ND+/wrBM666Ri58b+Cf8h7/AsCc/+6TDP/jownXVgnv11YDtnA/unw9hfB6azDoz9dWA7ZwP7p8PYXwemsw6M/XVgO2cD+6fD2F8HprMOjP11YDtnA/unw9hfB6azDoz9dWA7ZwP7p8PYXwemsw6M/XVgO2cD+6fD2F8HprMOjP11YDtnA/unw9hfB6azDoz9dWA7ZwP7p8PYXwemsw6M/XVgO2cD+6fD2F8HprMOjP11YDtnA/unw9hfB6azDoz9dWA7ZwP7p8PYXwemsw6M/XVgO2cD+6fD2F8HprMOjP11YDtnA/unw9hfB6azDoz9dWA7Z8PK+xLbedfT+PAOzzqhs054h2ed2DkbPPunwzz768B01oF59teB7ZwN7J8OY38dmM46MPbXge2cDeyfDmN/HZjOOjD214HtnA3snw5jfx2Yzjow9teB7ZwN7J8OY38dmM46MPbXge2cDeyfDmN/HZjOOjD214HtnA3snw5jfx2Yzjow9teB7ZwN7J8OY38dmM46MPbXge2cDeyfDmN/HZjOOjD214HtnA3snw5jfx2Yzjow9teB7ZwN7J8OY38dmM46MPbXge2cDWf2397evkKis729nbbOCTtY/WyUrjGNzkzQqCxPkHxT7JwNZ/avfRj8JW2dE3aw+tkoXWManWufR3/Jvil2zoZL+38y2+EavFaeXTsnLx6mc0aYCRJOkHxT7JyN2fHx8VF0ysGR4eyOPbuS1fZ1NkrXmEZnJqjEBDk9Gzz7T/bi2b8ibLYzEyScIPmm2Dkb2H+yF/avCJvtzAQJJ0i+KXbOBvaf7IX9K8JmOzNBwgmSb4qds4H9J3th/4qw2c5MkHCC5Jti52xg/8le2L8ibLYzEyScIPmm2Dkb2H+yF/avCJvtzAQJJ0i+KXbOBvaf7IX9K8JmOzNBwgmSb4qds4H9J3th/4qw2c5MkHCC5Jti52xg/8le2L8ibLYzEyScIPmm2Dkb2H+yF/avCJvtzAQJJ0i+KXbOBvaf7IX9K8JmOzNBwgmSb4qds4H9J3th/4qw2c5MkHCC5Jti52xg/8le2L8ibLYzEyScIPmm2Dkb2H+yF/avCJvtzAQJJ0i+KXbOxuzYRpp3HB0MZ3fs2U1bZ1Ohc8YwQcIJksfO2eDZf7IXz/4VYbOdmSDhBMk3xc7ZwP6TvbB/RdhsZyZIOEHyTbFzNrD/ZC/sXxE225kJEk6QfFPsnA3sP9kL+1eEzXZmgoQTJN8UO2cD+0/2wv4VYbOdmSDhBMk3xc7ZwP6TvbB/RdhsZyZIOEHyTbFzNrD/ZC/sXxE225kJEk6QfFPsnA3sP9kL+1eEzXZmgoQTJN8UO2cD+0/2wv4VYbOdmSDhBMk3xc7ZwP6TvbB/RdhsZyZIOEHyTbFzNrD/ZC/sXxE225kJEk6QfFPsnI3a9v/4sflf7K9zdu2cvHiYzhlhJkg4QQPrfCq0ntg5G7Xt/+hRuHAh3L37t6dPY+7J2RWeXTsnLx6mc0aYCRJO0Mr8enAQ7t4NFy6ER48GYTtnw4D9Z7OT68KFcPdu+OGHHtzI2b33+GIIs+b68Hjr9Ne3Dt6e/GJ4u3mvdknsXxE229nNBL28Vr3ksP1fvDiR/lxi7uxfMb89eHC2cKfXPzc2/v7117/++c/LvIGze+11W+73Hl98vdMc3IsHmye/uPuy/ieAZq06C2jn3WXjQ+eMMTxBO7sv5xN07XXrs4KhCTo+Pv714ODvX3/9z42NZXf99uDB4BbYORuWnv2XrwsXwq1bYX9//mpa9bO7+zLuqWTnUgiXdg2c3c5623nuiIfpnBH2MkG7L63Y/2ThPn4M+/vh1q3Wk/7y5e7ZP//dr17tW6C069atsL//+eXLNc/u5uaHcPaA33ftXDLy7N/ZGTsnLx6mc0a4sv0jJyh+0ApP0OeXL59IP7vQrl6tfjbK2D/7Ss1m4ebN8OxZZfvHPtFvHbw19uRyGrNW6gmdM8KV7T8wQdden3wzoPLXzfMJ+vzy5fDsWbh5s4jTap+NgvbP8MrPxkYjfSuv/MTZ38KL/p9g/6qw2c4uJuiTzc0PZl73P1m4jx9PPg2sern/7Ip85Qf7h3CO/Tc2wp074cWLZdz+161G1N89u6cxa6We0DkjbH+Cmuve44vV5+jcn/l58SLcubP60wD2T7T/+dKfp/b3rAZe0rGj/vPOrlkr9YTOGWHjEzS/TNt/nuVPA9h/nP03NsKdO3/7059iblz77J58Tbr4Qwu7L2enP69m4oeU+8+uWSv1hM4ZYcMTdO31me4N/cRnzDr/enBw8mkA+4+wv8t3elj4OynhRP2f7Fya/0qw8Z0r7F8RNtvZ7gS1h+jsF41N0MA6R77TA/ZfjCv7+7iwf0XYbGcmSDhB8k3B/t1gf52za9ZKPaFzRpgJEk6QfFOwfzfYX+fsmrVST+icEWaChBMk3xTs3w321zm7Zq3UEzpnhJkg4QTJNwX7d4P9dc6uWSv1hM4ZYSZIOEHyTcH+3WB/nbNr1ko9oXNGmAkSTpB8U2zZP3vm9o9P5LuecnbHnt20dTYVOmcMEyScIHnm9s9+57Hh2X+yF8/+FWGznZkg4QTJN8XWs3/+u2N/Axf2rwib7cwECSdIvinYvxvsr3N2zVqpJ3TOCDNBwgmSbwr27wb765xds1bqCZ0zwkyQcILkm4L9u8H+OmfXrJV6QueMMBMknCD5pmD/brC/ztk1a6We0DkjzAQJJ0i+Kdi/G+yvc3bNWqkndM4IM0HCCZJvCvbvBvvrnF2zVuoJnTPCTJBwguSbgv27wf46Z9eslXpC54wwEyScIPmmYP9usL/O2TVrpZ7QOSPMBAknSL4p2L8b7K9zds1aqSd0zggzQcIJkm8K9u8G++ucXbNW6gmdM8JMkHCC5JuC/bvB/jpn16yVekLnjDATJJwg+aZg/26wv87ZNWulntA5I8wECSdIvim27H8UnUh4bv/4O0eGszv27EpWu8TZSIBHhc79MBNUYoLGno3GkNnvPBbm2X+yF8/+FWGznZkg4QTJN+XI1LN//rtjfwMX9q8Im+3MBAknSL4p2L8b7K9zds1aqSd0zggzQcIJkm8K9u8G++ucXbNW6gmdM8JMkHCC5JuC/bvB/jpn16yVekLnjDATJJwg+aZg/26wv87ZNWulntA5I8wECSdIvinYv5tR9ifxSVvnJpg0GTbbufZ59Jfsm4L9u4mclvv379c+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.多态
循序渐进Python3(七) --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.单继 ...
- 循序渐进Python3(七) -- 2-- 面向对象进阶
面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实 ...
- python3.x 基础七:面向对象进阶
类的高级方法: 1.静态方法:在类方法前增加关键字@staticmethod,将普通方法变成静态方法,不能再次传值,不能访问实例变量或者类变量,与类的关系仅仅是通过类名进行调用 2.类方法:在类方法前 ...
- python自动化开发-[第七天]-面向对象
今日概要: 1.继承 2.封装 3.多态与多态性 4.反射 5.绑定方法和非绑定方法 一.新式类和经典类的区别 大前提: 1.只有在python2中才分新式类和经典类,python3中统一都是新式类 ...
- Python3 系列之 面向对象篇
面向对象的三大特性:继承.封装和多态 Python 做到胶水语言,当然也支持面向对象的编程模式. 封装 class UserInfo(object): lv = 5 def __init__(self ...
- python3.x Day5 面向对象
类:类是指:对具有相同属性的事物的抽象.蓝图.原型.在类中定义了这些事物都具备的属性和共同的方法. 对象:一个对象就是一个类实例化以后的实例,一个类必须经过实例化后才能在程序中被使用,一个类可以实例化 ...
- 循序渐进Python3(十一) --2-- web之javascript
JavaScrip JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之后 ...
- 循序渐进Python3(十)-- 2 -- SqlAlchemy
ORM 对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类 ...
- 循序渐进Python3(八) -- 0 -- 初识socket
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Un ...
随机推荐
- mysql操作汇集
1.修改root密码 cmd进如mysql的bin目录 >mysql -u root -p Enter password: ****** mysql> use mysql; mysql&g ...
- iOS中如何让TextView和TextField控件支持return键收起输入法
TextView和TextField控件是iOS中负责接收用户输入的控件,那当用户输入完成时怎么收起面板呢? 1.TextView和TextField控件获得焦点之后的第一反应就是弹出输入法面板: 2 ...
- spring mvc 和 velocity整合
java.lang.ClassNotFoundException: org.springframework.ui.velocity.VelocityEngineFactory 考虑是不是没有添加spr ...
- TIOBE Index for December 2015(转载)
There is hardly any doubt about it, Java will become TIOBE's programming language of the year 2015. ...
- docker跨容器之使用link大法通信
容器1 docker run --name elixir -it edib/elixir-phoenix-dev /bin/bash ip address看看自己的ip 容器2 docker run ...
- linux 下 文件权限和文件主
文件与文件夹的权限和所有者 1.chmod -R 755 file 777 含义与来源: 777含义:分别为:所有者.同组用户.其他用户 7的来源:文件有三种操作模式:读4.写2.执行1,分别值为42 ...
- activiti自定义流程之整合(六):获取我的申请任务
流程启动后,流程节点便进入到了任务相关的部分.可以看到我之前的做法是在启动节点就绑定了form表单,启动时就填写相关的数据.实际上在之前我的做法是不对开始节点做任何操作,知道任务节点的时候再填写相关的 ...
- ztree
http://www.s u c h s o.com/projecteactual/ztree-jiaocheng-mvc-checkbox-quanxuan-demo-down.html http: ...
- WWDC2014之iOS使用动态库 framework【转】
from:http://www.cocoachina.com/industry/20140613/8810.html JUN 12TH, 2014 苹果的开放态度 WWDC2014上发布的Xcode6 ...
- nodejs生成UID(唯一标识符)——node-uuid模块
unique identifier 惟一标识符 -->> uid 在项目开发中我们常需要给某些数据定义一个唯一标识符,便于寻找,关联. node-uuid模块很好的提供了这个 ...