这篇文章主要介绍了深入讲解Python中面向对象编程的相关知识,是Python入门学习中的基础知识,需要的朋友可以参考下
Python从第一天开始就是面向对象的语言。正因为如此,创建和使用类和对象是非常地容易。本章将帮助您在使用Python面向对象编程的技术方面所有提高。
如果没有任何以往面向对象(OO)的编程的经验,那么可能要了解一些基本的入门课程就可以了,或者至少某种形式的教程,让你有了解基本概念。
但是,这里会比较少地介绍面向对象编程(OOP):
OOP术语概述
类: 用户定义的原型对象,它定义了一套描述类的任何对象的属性。属性是数据成员(类变量和实例变量)和方法,通过点符号访问。
类变量:这是一个类的所有实例共享的变量。类变量在类,但外面的任何类的方法定义。类变量不被用作经常作为实例变量。
数据成员:保存与类和对象关联的数据的类变量或实例变量。
函数重载:一个以上的行为特定功能的分配。执行的操作所涉及的对象(自变量)的类型不同而不同。
实例变量:所定义的方法内,只属于一个类的当前实例的变量。
继承:类的特点,即都是由它派生其他类的转移。
实例:某一类的一个单独对象。属于类Circle一个obj对象,例如,是类Circle的一个实例。
实例化:创建一个类的实例。
Method : 一种特殊的函数,函数在类定义中定义。
对象:这是由它的类中定义的数据结构的唯一实例。一个对象包括两个数据成员(类变量和实例变量)和方法。
运算符重载:一个以上的函数功能,特定的操作符分配。
创建类:
类语句将创建一个新的类定义。类的名称紧跟在关键字class后跟一个冒号,如下所示:
?
1 2 3 class ClassName: 'Optional class documentation string' class_suite类有一个文档字符串,它可以通过类名.__ doc__访问。
class_suite由所有定义的类成员,数据属性与函数组件的语句。
例子
下面是一个简单的Python类的例子:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Employee: 'Common base class for all employees' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salaryempCount是一个类变量,其值将是这个类的所有实例共享。这可以从类中或外部进行访问,访问形式为 Employee.empCount。
第一个方法__init__()是一种特殊的方法,这就是所谓的类构造函数或当创建该类的一个新实例Python调用的初始化方法。
声明就像正常函数中一样,不同的是第一个参数到每个方法是类的方法。 Python增加了self参数列表;不需要把调用的方法都它列入。
创建实例对象:
要创建一个类的实例,调用类名并传递任何参数给__init__方法接收。
?
1 2 3 4 "This would create first object of Employee class" emp1 = Employee("Zara", 2000) "This would create second object of Employee class" emp2 = Employee("Manni", 5000)访问属性:
可以访问使用点运算符来访问对象的属性。而类变量使用类名来访问,如下所示:
?
1 2 3 emp1.displayEmployee() emp2.displayEmployee() print "Total Employee %d" % Employee.empCount现在,把所有的概念放在一起:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #!/usr/bin/python class Employee: 'Common base class for all employees' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salary "This would create first object of Employee class" emp1 = Employee("Zara", 2000) "This would create second object of Employee class" emp2 = Employee("Manni", 5000) emp1.displayEmployee() emp2.displayEmployee() print "Total Employee %d" % Employee.empCount当执行上面的代码,产生以下结果:
?
1 2 3 Name : Zara ,Salary: 2000 Name : Manni ,Salary: 5000 Total Employee 2在任何时候可以添加,删除或修改类和对象的属性:
?
1 2 3 emp1.age = 7 # Add an 'age' attribute. emp1.age = 8 # Modify 'age' attribute. del emp1.age # Delete 'age' attribute.除了使用正常的语句来访问属性,可以使用以下函数:
getattr(obj, name[, default]) : 访问对象的属性。
hasattr(obj,name) : 检查一个属性是否存在。
setattr(obj,name,value) : 设置一个属性。如果属性不存在,那么它将被创建。
delattr(obj, name) : 要删除一个属性。
?
1 2 3 4 hasattr(emp1, 'age') # Returns true if 'age' attribute exists getattr(emp1, 'age') # Returns value of 'age' attribute setattr(emp1, 'age', 8) # Set attribute 'age' at 8 delattr(empl, 'age') # Delete attribute 'age'内置的类属性:
每个Python类会继续并带有内置属性,他们可以使用点运算符像任何其他属性一样来访问:
__dict__ : 字典包含类的命名空间。
__doc__ : 类的文档字符串,或None如果没有定义。
__name__: 类名称。
__module__: 在类中定义的模块名称。此属性是在交互模式其值为“__main__”。
__bases__ : 一个可能是空的元组包含了基类,其在基类列表出现的顺序。
对于上面的类,尝试访问这些属性:
?
1 2 3 4 5 6 7 8 9 10