当前位置:文档之家› PYTHON教程:面向对象

PYTHON教程:面向对象

PYTHON教程:面向对象
PYTHON教程:面向对象

注意,即便是整数也被作为对象(属于int类)。这和C++、Java(1.5版之前)把整数纯粹作为类型是不同的。通过help(int)了解更多这个类的详情。C#和Java1.5程序员会熟悉这个概念,因为它类似与封装与解封装的概念。

对象可以使用普通的属于对象的变量存储数据。属于一个对象或类的变量被称为域。对象也可以使用属于类的函数来具有功能。这样的函数被称为类的方法。这些术语帮助我们把它们与孤立的函数和变量区分开来。域和方法可以合称为类的属性。

域有两种类型——属于每个实例/类的对象或属于类本身。它们分别被称为实例变量和类变量。

类使用class关键字创建。类的域和方法被列在一个缩进块中。

self关键字

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。

虽然你可以给这个参数任何名称,但是强烈建议你使用self这个名称——其他名称都是不赞成你使用的。使用一个标准的名称有很多优点——你的程序读者可以迅速识别它,如果使用self的话,还有些IDE(集成开发环境)也可以帮助你。

Python中的self等价于C++中的self指针和Java、C#中的this参考。

这也意味着如果你有一个不需要参数的方法,你还是得给这个方法定义一个self参数。类

1 2 3 4 5 6 7 8#!/usr/bin/python

#Filename:simplestclass.py

class Person:

pass#An empty block

p=Person()

print p

1 2 3#!/usr/bin/python class Person: def sayHi(self):

4 5 6 7

print'Hello,how are you?'

p=Person()

p.sayHi()

1 2 3 4 5 6 7 8 9#!/usr/bin/python

class Person:

def__init__(self,name):

https://www.doczj.com/doc/9511984992.html,=name

def sayHi(self):

print'Hello,my name is',https://www.doczj.com/doc/9511984992.html,

p=Person('Swaroop')

p.sayHi()

这里,我们把init方法定义为取一个参数name(以及普通的参数self)。在这个init

里,我们只是创建一个新的域,也称为name。注意它们是两个不同的变量,尽管它们有相同的名字。点号使我们能够区分它们。

最重要的是,我们没有专门调用init方法,只是在创建一个类的新实例的时候,把参数包括在圆括号内跟在类名后面,从而传递给init方法。这是这种方法的重要之处。

现在,我们能够在我们的方法中使用https://www.doczj.com/doc/9511984992.html,域。这在sayHi方法中得到了验证。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15#!/usr/bin/python

class Person:

'''Represents a person.''' population=0

def__init__(self,name):

'''Initializes the person's data.'''

https://www.doczj.com/doc/9511984992.html,=name

print'(Initializing%s)'%https://www.doczj.com/doc/9511984992.html,

#When this person is created,he/she

#adds to the population

Person.population+=1

def__del__(self):

16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48

'''I am dying.'''

print'%s says bye.'%https://www.doczj.com/doc/9511984992.html,

Person.population-=1

if Person.population==0:

print'I am the last one.'

else:

print'There are still%d people left.'%Person.population

def sayHi(self):

'''Greeting by the person.

Really,that's all it does.'''

print'Hi,my name is%s.'%https://www.doczj.com/doc/9511984992.html,

def howMany(self):

'''Prints the current population.'''

if Person.population==1:

print'I am the only person here.'

else:

print'We have%d persons here.'%Person.population

swaroop=Person('Swaroop')

swaroop.sayHi()

swaroop.howMany()

kalam=Person('Abdul Kalam')

kalam.sayHi()

kalam.howMany()

swaroop.sayHi()

swaroop.howMany()

记住,你只能使用self变量来参考同一个对象的变量和方法。这被称为属性参考。在这个程序中,我们还看到docstring对于类和方法同样有用。我们可以在运行时使用

Person.doc和Person.sayHi.doc来分别访问类与方法的文档字符串。

就如同init方法一样,还有一个特殊的方法del,它在对象消逝的时候被调用。对象消逝即对象不再被使用,它所占用的内存将返回给系统作它用。在这个方法里面,我们只是简单地把Person.population减1。

当对象不再被使用时,del方法运行,但是很难保证这个方法究竟在什么时候运行。如果你想要指明它的运行,你就得使用del语句,就如同我们在以前的例子中使用的那样。

Python中所有的类成员(包括数据成员)都是公共的,所有的方法都是有效的。只有一个例外:如果你使用的数据成员名称以双下划线前缀比如__privatevar,Python 的名称管理体系会有效地把它作为私有变量(只是改名)。

这样就有一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的名称都将作为公共的,可以被其他类/对象使用。记住这只是一个惯例,并不是Python 所要求的(与双下划线前缀不同)。

继承

面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。

在上述的场合中,SchoolMember类被称为基本类或超类。而Teacher和Student 类被称为导出类或子类。

现在,我们将学习一个例子程序。

使用继承

例11.5使用继承

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40#!/usr/bin/python

class SchoolMember:

'''Represents any school member.'''

def__init__(self,name,age):

https://www.doczj.com/doc/9511984992.html,=name

self.age=age

print'(Initialized SchoolMember:%s)'%https://www.doczj.com/doc/9511984992.html,

def tell(self):

'''Tell my details.'''

print'Name:"%s"Age:"%s"'%(https://www.doczj.com/doc/9511984992.html,,self.age),

class Teacher(SchoolMember):

'''Represents a teacher.'''

def__init__(self,name,age,salary):

SchoolMember.__init__(self,name,age)

self.salary=salary

print'(Initialized Teacher:%s)'%https://www.doczj.com/doc/9511984992.html,

def tell(self):

SchoolMember.tell(self)

print'Salary:"%d"'%self.salary

class Student(SchoolMember):

'''Represents a student.'''

def__init__(self,name,age,marks):

SchoolMember.__init__(self,name,age)

self.marks=marks

print'(Initialized Student:%s)'%https://www.doczj.com/doc/9511984992.html,

def tell(self):

SchoolMember.tell(self)

print'Marks:"%d"'%self.marks

t=Teacher('Mrs.Shrividya',40,30000)

s=Student('Swaroop',22,75)

print#prints a blank line

members=[t,s]

41 42for member in members:

member.tell()#works for both Teachers and Students

为了使用继承,我们把基本类的名称作为一个元组跟在定义类时的类名称之后。

注意基本类的init方法专门使用self变量调用,这样我们就可以初始化对象的基本类部

分。这一点十分重要——Python不会自动调用基本类的constructor,你得亲自专门调用它。

我们还观察到我们在方法调用之前加上类名称前缀,然后把self变量及其他参数传递给它。

注意,在我们使用SchoolMember类的tell方法的时候,我们把Teacher和Student 的实例仅仅作为SchoolMember的实例。

另外,在这个例子中,我们调用了子类型的tell方法,而不是SchoolMember类的tell 方法。可以这样来理解,Python总是首先查找对应类型的方法,在这个例子中就是如此。如果它不能在导出类中找到对应的方法,它才开始到基本类中逐个查找。基本类是在类定义的时候,在元组之中指明的。

一个术语的注释——如果在继承元组中列了一个以上的类,那么它就被称作多重继承。

python面向对象概念及练习题

面向对象及练习题 1.面向对象 1.1面向对象概念 面向对象是一种编程思想,是对现实世界中的事物进行抽象的方式。应用到代码编程设计中,是一种建立现实世界事物模型的方式。 1.2 面向对象和面向过程区别 面向过程关注的是完成工作的步骤,面向对象关注的是谁能完成工作。 面向对象是在完成工作的时候关注哪些个体能够完成对应的工作,找到对应的个体即可完成对应任务。 2.类 2.1类的概念 类是一系列事物的统称,同类事物必定具有相同的特征。日常事物的特征根据特性分为状态和行为,对应到类中是变量和方法。 特征分类: 状态→变量(成员变量) 行为→方法(成员方法) 统称:类的成员 2.2类定义语法格式 class类名: pass

说明:pass是空语句,不具有任何意义,仅为了保持程序结构完整性 2.3类名的命名规则 类名命名规范:满足大驼峰命名规则 3.对象 3.1对象的概念 对象是类的具体表现形式,是实际存在的个体。(类是一系列事物的统称) 3.2创建对象语法格式 对象名 = 类名() 3.3 注意事项 对象的创建不限制数量,一个类可以创建任意个数的对象 4.成员变量 4.1成员变量的概念 成员变量用于描述对象的固有状态或属性。

4.2定义成员变量语法格式(公有属性/公有变量) class 类名: def __init__(self): self.变量名1 = 值1 self.变量名2 = None 4.3成员变量定义语法格式(独有属性/独有变量) 对象名.变量名 = 值 4.4公有变量与独有变量的区别 ●公有变量在__init__方法中声明,每个对象都具有该变量 ●独有变量在创建对象后声明,只有当前对象具有此变量 ●定义对象的独有变量时,如果独有变量名与公有变量名相同,视为 修改公有变量的值;如果独有变量名与公有变量名不相同,视为定 义新的独有属性 ●None含义是为空,表示没有具体的数据

python 面向对象学习总结

引言 提到面向对象,总是离不开几个重要的术语:多态(Polymorphism),继承(Inheritance)和封装(Encapsulation)。Python也是一种支持OOP的动态语言,本文将简单阐述Python 对面向对象的支持。 在讨论Python的OOP之前,先看几个OOP术语的定义: ?类:对具有相同数据和方法的一组对象的描述或定义。 ?对象:对象是一个类的实例。 ?实例(instance):一个对象的实例化实现。 ?标识(identity):每个对象的实例都需要一个可以唯一标识这个实例的标记。 ?实例属性(instance attribute):一个对象就是一组属性的集合。 ?实例方法(instance method):所有存取或者更新对象某个实例一条或者多条属性的函数的集合。 ?类属性(classattribute):属于一个类中所有对象的属性,不会只在某个实例上发生变化 ?类方法(classmethod):那些无须特定的对性实例就能够工作的从属于类的函数。 1.Python中的类与对象 Python中定义类的方式比较简单: class类名: 类变量 def __init__(self,paramers): def函数(self,...) 其中直接定义在类体中的变量叫类变量,而在类的方法中定义的变量叫实例变量。类的属性包括成员变量和方法,其中方法的定义和普通函数的定义非常类似,但方法必须以self 作为第一个参数。 举例: class MyFirstTestClass: classSpec="itis a test class" def__init__(self,word): print"say "+word defhello(self,name): print"hello "+name 在Python类中定义的方法通常有三种:实例方法,类方法以及静态方法。这三者之间的区别是实例方法一般都以self作为第一个参数,必须和具体的对象实例进行绑定才能访问,而类方法以cls作为第一个参数,cls表示类本身,定义时使用@classmethod;而静态方法不需要默认的任何参数,跟一般的普通函数类似.定义的时候使用@staticmethod。 class MethodTest(): count= 0

Python编程基础-面向对象编程教案

第6章面向对象编程 教案 课程名称:Python编程基础 课程类别:必修 适用专业:大数据技术类相关专业 总学时:48学时(其中理论24学时,实验24学时) 总学分:3.0学分 本章学时:8学时 一、材料清单 (1)《Python编程基础》教材。 (2)配套PPT。 (3)代码。 (4)引导性提问。 (5)探究性问题。 (6)拓展性问题。 二、教学目标与基本要求 1.教学目标 介绍Python面向对象程序设计的发展及其思想,何时及怎样运用面向对象编程;实现了面向对象的核心“类与对象”的创建和使用,并拓展了面向对象常用的功能和方法。 2.基本要求 (1)认识面向对象编程的发展、实例、优点。

(2)了解使用面向对象编程的情形。 (3)掌握类的定义、使用和专有方法。 (4)掌握self参数的使用。 (5)掌握对象的创建(实例化)、删除。 (6)掌握对象的属性、方法引用和私有化方法。 (7)掌握迭代器和生成器。 (8)掌握类的继承、重载、封装等其他方法。 三、问题 1.引导性提问 引导性提问需要教师根据教材内容和学生实际水平,提出问题,启发引导学生去解决问题,提问,从而达到理解、掌握知识,发展各种能力和提高思想觉悟的目的。 (1)用于练习的所有资料都放在您面前了吗?如果不是,缺少哪些? (2)面向对象与面向过程有什么不同? (3)类和对象分别是什么?有什么关系? (4)生成器与迭代器是什么? (5)继承、重载、封装是什么? 2.探究性问题 探究性问题需要教师深入钻研教材的基础上精心设计,提问的角度或者在引导性提问的基础上,从重点、难点问题切入,进行插入式提问。或者是对引导式提问中尚未涉及但在课文中又是重要的问题加以设问。 (1)面向对象编程语言有哪些? (2)为什么要使用面向对象编程? (3)self参数有什么特点? (4)类的专有方法与普通的方法有何不同? (5)对象的创建与调用函数相似吗?

Python教程:面向对象

慎用面向对象:开始之前,请阅读《面向对象编程已死》 实际上我并不喜欢面向对象,使用Python以来,我仅仅在wxpython中用过比较多的面向对象。面向对象的设计方式,对我来讲有些繁琐了。 此次教程基本都是网上找来的内容,面向对象的短小的例子一时想不出比较好的。 简介 到目前为止,都是根据操作数据的函数或语句块来设计程序的。这被称为面向过程的编程。还有一种把数据和功能结合起来,用称为对象的东西包裹起来组织程序的方法。 这种方法称为面向对象的编程理念。在大多数时候你可以使用过程性编程,但是有些时候当你想要编写大型程序或是寻求一个更加合适的解决方案的时候,你就得使用面向对象的编程技术。 类和对象是面向对象编程的两个主要方面。类创建一个新类型,而对象这个类的实例。这类似于你有一个int类型的变量,这存储整数的变量是int类的实例(对象)。

注意,即便是整数也被作为对象(属于int类)。这和C++、Java(1.5版之前)把整数纯粹作为类型是不同的。通过help(int)了解更多这个类的详情。C#和Java 1.5程序员会熟悉这个概念,因为它类似与封装与解封装的概念。 对象可以使用普通的属于对象的变量存储数据。属于一个对象或类的变量被称为域。对象也可以使用属于类的函数来具有功能。这样的函数被称为类的方法。这些术语帮助我们把它们与孤立的函数和变量区分开来。域和方法可以合称为类的属性。 域有两种类型——属于每个实例/类的对象或属于类本身。它们分别被称为实例变量和类变量。 类使用class关键字创建。类的域和方法被列在一个缩进块中。 self关键字 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。 虽然你可以给这个参数任何名称,但是强烈建议你使用self这个名称——其他名称都是不赞成你使用的。使用一个标准的名称有很多优点——你的程序读者可以迅速识别它,如果使用self的话,还有些IDE(集成开发环境)也可以帮助你。 Python中的self等价于C++中的self指针和Java、C#中的this参考。 这也意味着如果你有一个不需要参数的方法,你还是得给这个方法定义一个self参数。类

python面向对象概念及练习题讲解学习

p y t h o n面向对象概念 及练习题

面向对象及练习题 1.面向对象 1.1面向对象概念 面向对象是一种编程思想,是对现实世界中的事物进行抽象的方式。应用到代码编程设计中,是一种建立现实世界事物模型的方式。 1.2 面向对象和面向过程区别 面向过程关注的是完成工作的步骤,面向对象关注的是谁能完成工作。 面向对象是在完成工作的时候关注哪些个体能够完成对应的工作,找到对应的个体即可完成对应任务。 2.类 2.1类的概念 类是一系列事物的统称,同类事物必定具有相同的特征。日常事物的特征根据特性分为状态和行为,对应到类中是变量和方法。 特征分类: 状态→变量(成员变量) 行为→方法(成员方法) 统称:类的成员

2.2类定义语法格式 class类名: pass 说明:pass是空语句,不具有任何意义,仅为了保持程序结构完整性 2.3类名的命名规则 类名命名规范:满足大驼峰命名规则 3.对象 3.1对象的概念 对象是类的具体表现形式,是实际存在的个体。(类是一系列事物的统称) 3.2创建对象语法格式 对象名 = 类名()

3.3 注意事项 对象的创建不限制数量,一个类可以创建任意个数的对象4.成员变量 4.1成员变量的概念 成员变量用于描述对象的固有状态或属性。 4.2定义成员变量语法格式(公有属性/公有变量) class 类名: def __init__(self): self.变量名1 = 值1 self.变量名2 = None 4.3成员变量定义语法格式(独有属性/独有变量) 对象名.变量名 = 值

4.4公有变量与独有变量的区别 ●公有变量在__init__方法中声明,每个对象都具有该变量 ●独有变量在创建对象后声明,只有当前对象具有此变量 ●定义对象的独有变量时,如果独有变量名与公有变量名相同,视为 修改公有变量的值;如果独有变量名与公有变量名不相同,视为定 义新的独有属性 ●None含义是为空,表示没有具体的数据 4.5变量的调用格式 取值:对象名.变量名 赋值:对象名.变量名 = 值 5.成员方法 5.1成员方法概念 成员方法用于描述对象的固有行为 5.2定义成员方法语法格式 格式一(无参方法):

Python 面向对象

Python 面向对象 Python从设计之初就已经是一门面向对象的 语言,正因为如此,在Python中创建一个类 和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一 些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程。 接下来我们先来简单的了解下面向对象的一 些基本特征。 面向对象技术简介 ?类(Class): 用来描述具有相同的属性和方法的 对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 ?类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。

?数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。 ?方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。 ?实例变量:定义在方法中的变量,只作用于当前实例的类。 ?继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。 ?实例化:创建一个类的实例,类的具体对象。 ?方法:类中定义的函数。 ?对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。 创建类 使用class语句来创建一个新类,class之后为类的名称并以冒号结尾,如下实例:

Python面向对象程序设计.doc

Python面向对象程序设计 Python编程课程教师:工作:Python面向对象编程课程描述面向对象编程是Python采用的基本编程思想。它可以集成属性和代码来定义类,从而使编程更简单。 本章介绍如何在Python中使用类和对象。 本章介绍了面向对象编程的基本定义以及类类的继承和多态性的使用。面向对象编程的基本概念概述了面向对象编程的基本概念。面向对象编程的基本概念概述了面向对象编程的基本概念。面向对象编程可以将一组数据和与这组数据相关的操作结合起来形成一个实体。这个实体是一个对象。 ()类:具有相同或相似属性的对象的抽象是一个类。 因此,对象的抽象是类的具体化,类就是对象。 例如,如果人类是一个类,那么特定的人就是一个对象。 ()封装:绑定数据和操作来定义新类的过程就是封装。 ()继承:一个类共享一个或多个其他类定义的结构和行为的类之间的关系。 继承描述了类之间的关系。 子类可以扩展基类的行为、覆盖、重定义。 如果人类是一个阶级,那么人类的子类就可以被定义。 男性可以继承人类的属性(例如,姓名、身高、年龄等)。)和方法(即动作)。 例如,吃饭和走路)不需要在子类中重复定义。

从同一个类继承的子类也有多态性,也就是说,同一个函数名在不同的子类中有不同的实现。 正如儿童从父母那里继承了人类的共同特征一样,儿童也有自己的特征。 ()方法:也称为成员函数,是指对定义为类声明一部分的对象的操作。 方法定义了可以在对象上执行的操作。 ()构造函数:创建对象时初始化对象的成员函数。 构造函数通常与其所属的类具有完全相同的名称。 ()析构函数:析构函数与构造函数相反。当对象超出其范围时(例如,对象所在的函数已被调用),系统自动执行析构函数。 析构函数经常被用来清理混乱。 定义和使用类声明类静态变量静态方法类方法使用实例()函数判断对象类型声明类定义一个函数sum()来计算和打印两个参数的和。 函数sum()包含两个参数。 参数num和num代码如下:defsum(num,num):print(numnumnum num)面向对象编程中的基本概念()对象:面向对象编程思想可以将一组数据和与这组数据相关的操作集合起来形成一个实体,这就是对象。 ()类:具有相同或相似属性的对象的抽象是一个类。 因此,对象的抽象是类的具体化,类就是对象。

相关主题
文本预览
相关文档 最新文档