发布时间: 2018-08-17 21:11:11
6.1 实验介绍
6.1.1 关于本实验
本实验主要介绍了 Python 面向对象编程的相关知识点和简单操作。
6.1.2 实验目的
1.理解 Python 面向对象编程的含义。
2.掌握和 Python 面向对象编程相关的操作。
6.2 实验任务配置
6.2.1 概念知识
1. 面向对象编程——Object Oriented Programming,简称 OOP,是一种程序设计思想。OOP
把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。
而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。
在 Python 中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。
2. 面向对象技术简介
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
实例变量:定义在方法中的变量,只作用于当前实例的类。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个 Dog 类型的对象派生自 Animal 类,这是模拟"是一个(is-a)"关系(例图,Dog 是一个 Animal)。
实例化:创建一个类的实例,类的具体对象。方法:类中定义的函数。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
6.2.2 实验内容
步骤 1 创建和使用类
创建 Dog 类。
根据 Dog 类创建的每个实例都将存储名字和年龄。我们将赋予了每条小狗蹲下(sit())和打滚(roll_over())的能力:
class Dog():
"""一次模拟小狗的简单尝试"""
def init (self,name,age):
"""初始化属性 name 和 age"""
self.name = name self.age = age def sit(self):
"""模拟小狗被命令时蹲下"""
print(self.name.title()+"is now sitting")
def roll_over(self):
"""模拟小狗被命令时打滚"""
print(self.name.title()+"rolled over!")
步骤 2 访问属性
我们再来看一个完整的实例:
class Employee:
'所有员工的基类'
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)
"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000) emp1.displayEmployee()
emp2.displayEmployee()
print("Total Employee %d" % Employee.empCount)
执行以上代码输出结果如下:
Name : Zara ,Salary: 2000 Name : Manni ,Salary: 5000 Total Employee 2
步骤 3 类的继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。
在 python 中继承中的一些特点:
1:在继承中基类的构造( init ()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。
2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上 self 参数变量。区别在于类中调用普通函数时并不需要带上 self 参数。
3:Python 总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
如果在继承元组中列了一个以上的类,那么它就被称作"多重继承" 。
class Parent: # 定义父类
parentAttr = 100
def init (self):
print("调用父类构造函数")
def parentMethod(self):
print('调用父类方法')
def setAttr(self, attr):
Parent.parentAttr = attr def getAttr(self):
print("父类属性 :", Parent.parentAttr)
class Child(Parent): # 定义子类
def init (self):
print("调用子类构造方法")
def childMethod(self):
print('调用子类方法')
c = Child() # 实例化子类c.childMethod() # 调用子类的方法c.parentMethod() # 调用父类方法
c.setAttr(200) # 再次调用父类的方法 - 设置属性值
c.getAttr() # 再次调用父类的方法 - 获取属性值
以上代码执行结果如下: 调用子类构造方法
调用子类方法调用父类方法父类属性 : 200
步骤 4 类属性和方法
类的私有属性:
private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self. private_attrs。
类的方法
在类的内部,使用 def 关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数。
类的私有方法
private_method:两个下划线开头,声明该方法为私有方法,不能在类地外部调用。在类的内部调用 self. private_methods。
class JustCounter:
secretCount = 0 # 私 有 变 量
publicCount = 0 # 公开变量
def count(self):
self. secretCount += 1
self.publicCount += 1 print(self. secretCount)
counter = JustCounter() counter.count() counter.count() print(counter.publicCount)
print(counter. secretCount) # 报错,实例不能访问私有变量
上一篇: {Java}Maven的简单使用
下一篇: {HTML5}基础核心-第一节-上