(七)Python 面向对象的程序设计(类)

简介: (七)Python 面向对象的程序设计(类)


  • 1、面向对象的概念


  • 常用的编程方式有两种:面向过程面向对象
  • 面向过程:是早期程序员所使用的方法,首先将问题分解成步骤,然后用函数逐个按次序实现,运行的时候依次调用即可。
  • 面向对象:是指把构成问题的事务分解组合抽象成对象,建立对象的目的不是为了完成其中某个步骤,而是为了描述某个事务在解决整个问题中的行为,可能涉及一个步骤,但通常都会涉及多个步骤,很好地体现了软件重用的思想。Python 在涉及之初就是一门面向对象的语言。
  • 看几个概念
  • 类(class):对具有相同属性和方法的一组对象的描述或定义。
  • 对象(object):类的实例。
  • 实例(Inatance):其含义与对象基本一致。创建一个新对象的过程称为实例化(Instantiation),这个新对象称为这个类的一个实例。
  • 标识(Identity): 每个实例对象的唯一标识。
  • 实例属性(Inatance Attribute): 特定对象所具有的一组属性的集合。
  • 实例方法(Inatance Method): 对于特定对象实例的一条或多条属性的操作函数集合。
  • 类属性(Class Attribute):  属于一个类中所有对象的属性,不会只在某个实例上发生变化。
  • 类方法(Class Method):那些无须指定实例就能够工作的从属于类的函数。


  • 2、类与实例


  • 创建类和子类:类使用class关键字创建,类的属性和方法被列在一个缩进块中。如下:


#  类
 class animals:
         pass
 # 子类
 class mammals(animals):
         pass
  • 用函数表示类的行为特征:为类和子类创建行为特征---函数,如下:


class animals:
     def breth(self):
         print("呼吸")
class mammals(animals):
     def move(self):
         print("奔跑")
class dog(mammals):
     def eat(self):
         print("吃")
Bob = dog()
Bob.move()
Bob.eat()
运行结果:
奔跑


  • 3、面向对象的特征


  • Python程序是面向对象的程序,具有三个特征:封装、继承和多态
  • 封装是指将对象得到的数据和行为结合,将基本类结构的细节隐藏起来,通过方法接口实现对实例变量的所有访问。Python中允许对类的数据和方法进行封装,下面的例子封装了类中的数据,将公司名和领导人分别封装到对象objc1和objc2中的self的 companyname 和 leader属性中。


class Company:
     def __init__(self,companyname,leader):
           self. companyname = companyname
           self. leader = leader
if __name__ == "__main__":
     objc1 = Company("a","Nike")
     objc1 = Company("b","Jack")
  • 在调用数据时,可以使用两种方式:通过对象直接调用和通过self直接调用。例如:


class Company:
    def __init__(self, companyname, leader):
          self.companyname = companyname
          self.leader = leader
    def show(self):
          print(self.companyname)
          print(self.leader)
if __name__ == "__main__":
    objc1 = Company("a", "Nike")
    objc2 = Company("b", "Jack")
# 通过对象直接调用封装的数据
print(objc1.companyname)
print(objc1.leader)
运行结果为:
a
Nike
# 通过self来间接调用,self即对象本身
objc1.show()
objc2.show()
运行结果为:
a
Nike
b
Jack
  • 继承:当已经存在一个类,需要另外再创建一个和已有类型非常相似的类时,通常不必将同一段代码重复多次,而是用继承。在类上添加关联,使得位于不同层次的类可以“继承”位于关系上层的类的属性。继承有利于代码的复用和模块化。和其他语言不同的是,Python 中的类还具有多继承的特性。即一个类可以有多个父类。
  • 继承一个父类: 下面这个例子中,Company类 只有Scale 一个父类。当调用 check()方法时,Company 本身没有定义check()方法,代码就会向上自动检测父类Scale中是否存在check()方法,结果父类中找到了该方法,次为单继承,即只有一个父类。


class Scale:
    def check(self):
         if self.count_person > 500:
              print("%s是个大公司." % self.name)
         else:
              print("%s是个小公司." % self.name)
class Company(Scale):
    def __init__(self,name,count):
         self.name = name
         self.count_person = count
if __name__ == "__main__":
   my_company = Company("JK",600)
   my_company.check()
  • 继承多个父类:


class Scale:
     def check(self):
          if self.count_person > 500:
               return "%s是个大公司." % self.name
          else:
               return "%s是个小公司." % self.name
class Detail:
     def show(self,scale):
         print("%s,公司有%s名员工."%(scale,self.count_person))
class Company(Scale,Detail):
    def __init__(self,name,count):
         self.name = name
         self.count_person = count
if __name__ == "__main__":
     my_company = Company("JK",600)
     company_scale = my_company.check()
     my_company.show(company_scale)
结果为:
JK是个大公司.,公司有600名员工.
  • 在上面的例子中,类Company 分别继承了类Scale和类Detail,可以调用父类中的check和show方法,这种继承的方法称为多继承
  • 多态: 多态即多种姿态,是指在事先不知道对象类型的情况下,可以自动根据对象的不同类型,执行响应的操作。很多内建运算符以及函数、方法都能体现多态的性质。例如:“+”运算符,在连接数值类型变量时表示加法操作,在连接字符串时则表示拼接。例如:函数的多态性举例


>>> def length(x):
         print(repr(x),"的长度为",len(x))
>>> print(length('aaa'))
'aaa' 的长度为 3
>>> print(length([1,2,4,5,6]))
[1, 2, 4, 5, 6] 的长度为 5
  • 函数 repr() 返回一个对象的可打印字符串,无须事先知道是什么类型,该函数也表现了Python多态特性。


  • 4、库的安装


  • 4.1、包的管理: Python 程序一般由 包(package)模块(module)函数(function)三部分组成。其中 是一系列模块组成的集合,模块是处理某类问题的函数和类的集合。一个包可以包含多个模块,每个模块可以包含多个函数与类,同时也可以有执行语句,每个包其实就是完成特定任务的工具箱。具体来说,一个.py文件可以被看做是一个独立的模块,一个模块通常就是一个文件,因为模块是按照逻辑组织代码的方法,而文件是物理层存储模块的方式。包是一个可以完整测试的、独立开发的模块组合,通常发布在Python 指定的文件夹里。当多个模块使用同一组模块时,可以将模块封装成包,发布到公共文件里,这就是包的含义。所以说模块对应的物理层结构是文件,那么包对应的物理层结构就是文件夹。包是通过目录结构组织的模块的集合,使用包的方式跟模块类似,可以通过import导入,需要注意的是,当文件夹当做包使用时,文件夹中需要包含一个_init_.py 文件,主要为了避免将包当做普通的文件夹。_init_.py的内容可以为空。


  • 4.2、包管理工具: 有4种,关系如下:


image.png


  • distutils: 是 Python 标准库的一部分,为开发者提供一种方便的打开方式,同时也为使用者提供了方便的包安装方式。
  • setuptools: 是对distutils 的增强,引入了包依赖管理。setuptools可以为Python 包创建egg文件。Python 与 egg文件的关系,类似于Java语言与 jar包的关系。setuptools提供的easy_install 脚本可以用来安装 egg 包。
  • easy_install:是由 PEAK (Python Enterprise Application Kit) 开发的setuptools包里带的一个命令,所以使用easy_install实际上是在调用 setuptools 来完成模块的工作。easy_install可以自动从 https://pypi.python.org/pypi 下载相关的包,并完成安装和升级。
  • pip:是安装管理Python 包的标准工具,是对easy_install增强和替代,但它仍有大量的功能建立在setuptools组件之上。同样可以从 PyPI网站自动下载安装包。在pip中,安装所需要的包都需要先下载,并且所有的安装包都会被跟踪,因此避免了出现安装不完整的情况。
  • 4.3、包格式:用于Python 第三方库安装的包格式有以下两种
  • egg: 格式是 setuptools 引入的一种文件格式,使用.egg作为扩展名,用setuptools识别、解析和安装。
  • wheel:本质上是 ZIP的压缩格式,使用 .whl 作为扩展名。
  • 4.4、安装方式: 百度自己搜


  • 5、模块的引用应用Python 进行编程时,通常会使用一些库(模块) 来满足开发需求。Python 中库主要分为三大类: 第一类是标准模块,第二类是第三方模块,第三类是自定义模块。无论哪个库使用之前都需要导入。这里一个库可能包含多个模块,但其含义均指 module。
  • 5.1、使用 import 方式导入库
    使用 import 语句导入模块,语法如下:


import <模块 1>
import <模块 2>


  • 也可以在一行内导入多个模块(可读性差,不推荐)
    只要导入了某个模块,就可以引用它的所有公共函数、类或者属性。如果 import语句是在代码的顶层,则它的作用域为全局;如果import语句在某个函数中,则它的作用域仅局限于该函数。
    用import模块语句导入模块,就在当前的名称空间(NameSpace) 中建立一个指向该模块的引用,这种引用必须使用全称。也就是说,当使用被导入的模块的函数时,在调用时必须同时包含模块的名字,不能只使用函数名字,而应该使用“模块名.函数名”,例如导入 绘图模块 turtle


>>> import turtle
>>> t= turtle.Pen()


  • 若引入的模块名称较长,为方便使用,通常可用 as 定义一个别名。例如,导入 Matplotlib库 pyplot 模块:import Matplotlib as plt ,然后就可以直接用 plt.figure(....) 创建绘图对象,二不必使用 Matplotlib.pyplot.figure(...)。
  • 5.2、from 方式
    将模块中指定的属性或名称导入当前程序命名空间,语法格式如下:


from <模块名> import <函数名>
  • 例如,导入画图模块 turtle 中的 Pen()函数:


>>> from  turtle import Pen
>>> t = Pen()


目录
相关文章
|
1月前
|
Java 程序员 C++
Python 面向对象详解!
本文详细介绍了Python中的面向对象编程(OOP),包括类、对象、继承、封装、多态和抽象等核心概念。通过具体示例,解释了如何使用类定义对象的属性和方法,以及如何通过继承实现代码重用。文章还探讨了封装和多态的重要性,并介绍了私有属性和抽象类的使用方法。最后,总结了OOP的四大支柱:封装、抽象、继承和多态,强调了这些概念在Python编程中的应用。适合Java程序员扩展Python编程知识。
68 2
|
29天前
|
Python
Python面向对象(2)
【10月更文挑战第14天】
Python面向对象(2)
|
30天前
|
设计模式 程序员 C语言
Python面向对象
【10月更文挑战第13天】
Python面向对象
|
1月前
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
17 1
|
1月前
|
Java C++ Python
Python基础---类
【10月更文挑战第10天】Python类的定义
21 2
|
1月前
|
设计模式 开发者 Python
Python类里引用其他类
Python类里引用其他类
|
1月前
|
设计模式 开发者 Python
Python 类中引用其他类的实现详解
Python 类中引用其他类的实现详解
36 1
|
1月前
|
JSON 缓存 API
在 Python 中使用公共类处理接口请求的响应结果
在 Python 中使用公共类处理接口请求的响应结果
30 1
|
1月前
|
机器人 关系型数据库 Python
【Python篇】Python 类和对象:详细讲解(下篇)
【Python篇】Pyt hon 类和对象:详细讲解(下篇)
23 2
|
1月前
|
算法 Python
【Python篇】Python 类和对象:详细讲解(中篇)
【Python篇】Python 类和对象:详细讲解(中篇)
24 2