Python从设计之初就已是一门面向对象的语言,正由于如此,在Python中建立一个类和对象是很容易的。本章节咱们将详细介绍Python的面向对象编程。html
若是你之前没有接触过面向对象的编程语言,那你可能须要先了解一些面向对象语言的一些基本特征,在头脑里头造成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程。python
接下来咱们先来简单的了解下面向对象的一些基本特征。编程
和其它编程语言相比,Python 在尽量不增长新的语法和语义的状况下加入了类机制。数据结构
Python中的类提供了面向对象编程的全部基本功能:类的继承机制容许多个基类,派生类能够覆盖基类中的任何方法,方法中能够调用基类中的同名方法。编程语言
对象能够包含任意数量和类型的数据。ide
语法格式以下:函数
类实例化后,可使用其属性,实际上,建立一个类以后,能够经过类名访问其属性。学习
类对象支持两种操做:属性引用和实例化。ui
属性引用使用和 Python 中全部的属性引用同样的标准语法:obj.name。this
类对象建立后,类命名空间中全部的命名都是有效属性名。因此若是类定义是这样:
以上建立了一个新的类实例并将该对象赋给局部变量 x,x 为空的对象。
执行以上程序输出结果为:
MyClass 类的属性 i 为: 12345 MyClass 类的方法 f 输出为: hello world
类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用,像下面这样:
类定义了 __init__() 方法,类的实例化操做会自动调用 __init__() 方法。以下实例化类 MyClass,对应的 __init__() 方法就会被调用:
x = MyClass()
固然, __init__() 方法能够有参数,参数经过 __init__() 传递到类的实例化操做上。例如:
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
以上实例执行结果为:
<__main__.Test instance at 0x100771878>
__main__.Test
从执行结果能够很明显的看出,self 表明的是类的实例,表明当前对象的地址,而 self.class 则指向类。
self 不是 python 关键字,咱们把他换成 runoob 也是能够正常执行的:
以上实例执行结果为:
<__main__.Test instance at 0x100771878>
__main__.Test
在类的内部,使用 def 关键字来定义一个方法,与通常函数定义不一样,类方法必须包含参数 self, 且为第一个参数,self 表明的是类的实例。
执行以上程序输出结果为:
runoob 说: 我 10 岁。
Python 一样支持类的继承,若是一种语言不支持继承,类就没有什么意义。派生类的定义以下所示:
BaseClassName(示例中的基类名)必须与派生类定义在一个做用域内。除了类,还能够用表达式,基类定义在另外一个模块中时这一点很是有用:
class DerivedClassName(modname.BaseClassName):
执行以上程序输出结果为:
ken 说: 我 10 岁了,我在读 3 年级
Python一样有限的支持多继承形式。多继承的类定义形以下例:
须要注意圆括号中父类的顺序,如果父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。