iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python 3 学习笔记:面向对象编程
  • 496
分享到

Python 3 学习笔记:面向对象编程

面向对象学习笔记Python 2023-01-31 05:01:52 496人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

概述 面向对象编程(Object Oriented Programming,即 OOP),是一种程序设计思想,比面向过程编程更加灵活,更易扩展。 python 在设计的时候就是按照面向对象编程的思想设计的,像我们前面学过的各种数据类型,如字

概述

面向对象编程(Object Oriented Programming,即 OOP),是一种程序设计思想,比面向过程编程更加灵活,更易扩展。

python 在设计的时候就是按照面向对象编程的思想设计的,像我们前面学过的各种数据类型,如字符串、列表、字典等都是一个个对象,它们都具有各自的属性和行为。

面向对象编程就是将客观存在的事物,总结提炼出它们各自的属性与行为,然后通过编程的方法形成一个模版(即类),我们就可以根据这个模版创建出一个个实际的、可使用的对象(即类的实例)。

特性

封装

封装是面向对象编程的核心思想,即将对象具有的,且是我们需要的属性和行为封装起来,编写成一个模版(即类),而在使用的时候只需要事先根据定义好的模版创建出其实例即可,使用过程中无需知道其属性和行为是如何实现的,只需要知道它们能够完成哪些功能即可。

继承

举个例子,我们创建一个四边形的类,它具有四条边,四个角这两个特性,计算周长、面积这两个行为;当我们基于这个四边形的类,再创建一个平行四边形的类,则该平行四边形也将自动具有四条边、四个角的特性和计算周长、面积的行为。

继承就是实现重复利用的重要手段,子类可以继承父类的属性和行为。

多态

子类继承于父类,那么子类也就拥有了父类的特性和行为,但是因为子类相对于父类而言是一个全新的类,所以它也拥有自己独特的特性和行为,这就是多态。例如,平行四边形继承于四边形,同样拥有四条边和四个角同时,它也有自己的特性,如对边相等,对角相等。

类和实例

面向对象编程的思想就是用代码描述客观世界中的物体,但是不可能将每个物体都用代码描述一遍,这不现实,所以引入了类。类就是一系列具有相同特性和行为的物体的集合,描述物体的模版。当我们需要一个该物体的具体实例时,只需要按照这个模版就能创建一个新的物体实例,然后对其进行操作。

如何定义类

Python 编程中,使用关键字 class 定义类,

class Triangle:
pass

Triangle(三角形)是类的名字。

创建类的实例

定义好一个类,并不能供我们直接使用,而是需要创建一个它的实例之后,才可以使用其内部的属性和行为。

就像国家发行钞票,会制作的一个钞票模版,然后根据这个模版印刷出一张张的纸币,这些纸币就是该钞票模版的实例,市场上流通的也是这些纸币,不会是这个钞票模版。所以,当我们要使用这个类的时候,就需要将其实例化,创建一个它的实例,

class Triangle:
pass

if name == "main":
triangle = Triangle()

triangle 就是类 Triangle的实例,也是这个实例的名称。

init() 方法

在 Python 中,如果在定义一个类的时候,不自定义该方法,则编译器会自动帮我们指定一个。但是如果想在创建类的实例的时候,为它的属性赋予一些参数,就需要自定义一个 init() 方法。

该方法用于在创建类的实例时,传入必要的属性。它的第一个参数必须是 self ,代表实例本身,

class Triangle:
def init(self, base, height)
self.base = base
self.height = height

if name == "main":
triangle = Triangle(4, 5)

这样就给 Triangle 这个类定义了一个 init() 方法,在创建其实例的时候,必须传入除 self 以外的所有参数。

属性

属性指类中的变量,包括类的属性和实例属性,它们定义的位置不同。

类的属性

类的属性定义在类中(实例方法之外),所有类的实例都可以访问类的属性。

class Triangle:
triangle_amount = 0

def __init__(self, base, height):
    self.base = base
    self.height = height

    Triangle.triangle_amount += 1

if name == "main":
triangle_1 = Triangle(4, 5)
triangle_2 = Triangle(12, 5)

print(Triangle.triangle_amount)
print(triangle_1.triangle_amount)

类的属性可以通过类名直接访问,也可以通过类的实例访问。

类的属性不仅仅只能在定义类的时候定义,也可以在类的定义之外动态添加,

class Triangle:
triangle_amount = 0

def __init__(self, base, height):
    self.base = base
    self.height = height

    Triangle.triangle_amount += 1

if name == "main":
triangle_1 = Triangle(4, 5)
triangle_2 = Triangle(12, 5)

Triangle.triangle_number = "001"

print(triangle_1.triangle_number)
print(triangle_2.triangle_number)

实例属性

实例属性是指在类的方法中定义的属性(变量),只能被类的实例使用。而且,改变一个实例的属性并不会影响其他实例,

class Triangle:
def init(self, base, height):
self.base = base
self.height = height

def print_base(self):
    print(self.base)

def print_height(self):
    print(self.height)

if name == "main":
triangle_1 = Triangle(12, 5)
triangle_2 = Triangle(19, 7)

triangle_1.print_base()
triangle_1.print_height()

triangle_1.base = 20
triangle_1.height = 10

triangle_1.print_base()
triangle_1.print_height()

triangle_2.print_base()
triangle_2.print_height()

init() 方法中,base 和 height 就是实例属性,当创建 triangle_1 和 triangle_2 两个三角形的时候分别给它们的 base 和 height 属性赋了值。当改变 triangle_1 的属性后,并没有影响 triangle_2 的属性值。

方法

每个对象都有其独有的行为,在面向对象编程中把这些行为称为方法,也就是面向过程编程中的函数,但是有些微差别。

方法需要在定义类的时候一起定义,这样类的实例就可以使用这些方法。定义方法和定义函数相似,不过方法必须包含一个 self 参数,且必须放在第一位,

class Triangle:
def init(self, base, height):
self.base = base
self.height = height

def compute_area(self)
    area = self.base * self.height / 2

函数用于实现某个独立的功能,而实例方法是实现类(类的实例)的一个特性行为,只有类的实例可以使用它。

访问限制

可以在类的外部访问创建类的时候定义的属性和方法,如果我们不想某些属性或方法在类的外部被直接访问(使用),可以给它们加上限制。不受限制的代码如下:

class Triangle:
description = "我是这个类最原始的描述"

def __init__(self):
    pass

def print_base_height(self):
    print("我是这个三角形的底和高")

if name == "main":
print(Triangle.description)

triangle = Triangle()
triangle.print_base_height()

受保护的

以单下划线开头的属性和方法是受保护的(protected)

class Triangle:
_description = "我是这个类最原始的描述"
_number = 0

def __init__(self):
    self._base = "我是底"
    print(self._base)

    pass

def _print_base_height(self):
    print("我是这个三角形的底和高")

if name == "main":
print(Triangle._description)

triangle = Triangle()
triangle._print_base_height()

print(triangle._base)

print(str(Triangle._number))
Triangle._number += 99
print(str(Triangle._number))

私有的

以双下划线开头的属性和方法是私有的(private),

class Triangle:
description = "我是这个类最原始的描述"
number = 0

def __init__(self):
    self.__base = "我是底"
    print(self.__base)

    pass

def __print_base_height(self):
    print("我是这个三角形的底和高")

def modify_description(self):
    print(Triangle.__description)

    Triangle.__description = "我是在类定义之内修改的描述"
    print(Triangle.__description)

if name == "main":
triangle = Triangle()
triangle.modify_description()

print(triangle._Triangle__description)
triangle._Triangle__print_base_height()

print(str(triangle._Triangle__number))
triangle._Triangle__number += 99
print(str(triangle._Triangle__number))

通过上面的代码可以看出,通过 类的实例名._类名__xxx 的方式依然可以访问私有的属性和方法。

所以,在 Python 编程中,访问限制并不能真正的限制你,总是可以通过别的某种方法突破限制,全凭自觉吧。

@property

通过 @property(装饰器)可以将一个方法转换为一个用于计算的特殊属性,可以通过方法名(无需在方法名后面加上小括号)直接访问该方法,

class Triangle:
def init(self, base, height):
self.base = base
self.height = height

@property
def compute_area(self):
    return self.base * self.height / 2

if name == "main":
triangle = Triangle(12, 5)
print(triangle.compute_area)

继承

继承是面向对象编程的一个重要特性,被继承的类称为父类(或基类),继承父类的类称为子类(或派生类),子类具有父类除了私有属性和方法以外的所有属性和方法。继承使得子类不再需要重新定义父类中已有的属性和方法,只要拿过来直接用就可以了。

class Triangle:
def init(self, base, height):
self.base = base
self.height = height

@property
def compute_area(self):
    return self.base * self.height / 2

class IsoscelesTriangle(Triangle):
pass

if name == "main":
isosceless_triangle = IsoscelesTriangle(12, 5)
print(isosceless_triangle.compute_area)

多态

如果是仅仅只能继承父类的一切,那和父类还有什么两样?所以,子类除了可以继承父类,还可以根据自己的特点增加自己的特性,修改从父类集成的特性,也就是面向对象编程的多态。

class Rectangle:
def init(self, length, width):
self.length = length
self.width = width

@property
def area(self):
    return self.length * self.width

@property
def perimeter(self):
    return (self.length + self.width) * 2

class Square(Rectangle):
def init(self, length, width=0):
self.length = length
self.width = width

@property
def area(self):
    return self.length ** 2

@property
def perimeter(self):
    return self.length * 4

if name == "main":
rectangle = Rectangle(12, 5)
print(str(rectangle.area))
print(str(rectangle.perimeter))

square = Square(12)
print(str(square.area))
print(str(square.perimeter))

--结束END--

本文标题: Python 3 学习笔记:面向对象编程

本文链接: https://www.lsjlt.com/news/188150.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python 3 学习笔记:面向对象编程
    概述 面向对象编程(Object Oriented Programming,即 OOP),是一种程序设计思想,比面向过程编程更加灵活,更易扩展。 Python 在设计的时候就是按照面向对象编程的思想设计的,像我们前面学过的各种数据类型,如字...
    99+
    2023-01-31
    面向对象 学习笔记 Python
  • Python的面向对象编程方式学习笔记
    类与实例 类与实例相互关联着:类是对象的定义,而实例是“真正的实物”,它存放了类中所定义的对象的具体信息。 下面的示例展示了如何创建一个类: class MyNewObjectType(bases): ...
    99+
    2022-06-04
    面向对象 学习笔记 方式
  • PHP学习笔记:面向对象编程基础
    导言:面向对象编程(Object-Oriented Programming,简称OOP)是一种编程的思维方式,通过将问题分解为多个对象并定义对象之间的交互,来解决复杂的编程问题。PHP作为一门功能强大的编程语言,也支持面向对象编程。本文将介...
    99+
    2023-10-21
    PHP 基础 面向对象编程(OOP)
  • js 面向对象学习笔记
    目录数据赋值拷贝值类型赋值--函数形参&实参引用类型赋值对象的动态性delete删除属性数据赋值拷贝 1、值得赋值是独立的 num1=12; num1=num2 将存储值赋值...
    99+
    2023-05-18
    js 面向对象
  • Java学习笔记之面向对象编程精解
    目录包继承super 关键字finalprotected关键字组合多态抽象类接口面向对象编程(包、继承、组合、多态 、抽象类、接口) 包 包其实就是类的集合,其本质上其实就是一个文件...
    99+
    2022-11-12
  • python学习笔记:第16天 面向对象
    目录 ⼀、类的成员介绍: 二、类的成员-变量 三、类的成员-方法 四、类的成员-属性 五、私有属性 ...
    99+
    2023-01-30
    面向对象 学习笔记 python
  • python学习笔记:第17天 面向对象
    一、类与类之间的依赖关系 ⼤千世界, 万物之间皆有规则和规律. 我们的类和对象是对⼤千世界中的所有事物进⾏归类. 那事物之间存在着相对应的关系. 类与类之间也同样如此. 在⾯向对象的世界中. 类与类 中存在以下关系: 依赖关系 关联关系...
    99+
    2023-01-30
    面向对象 学习笔记 python
  • Python面向对象编程中关于类和方法的学习笔记
    类和实例 python是一个面向对象的语言,而面向对象最重要的概念就是类和实例, 记得刚学习的时候不太理解这些概念,直到老师说了一句”物以类聚”. 没错就是类, 归类 物以类聚 类其实就是把一些相同特性的事...
    99+
    2022-06-04
    面向对象 学习笔记 方法
  • Scala 学习之面向对象(3)
    ==> 类        ---> 类的定义class Student{     // 定义属性     private var stuName:String = "Tom"     private vat stuAge:Int...
    99+
    2023-01-31
    面向对象 Scala
  • Python学习之面向对象编程详解
    目录什么是面向对象编程(类)类的关键字 - class类的定义与使用类的参数 - selfself 的解析与总结类的构造函数构造函数的创建方法关于对象的生命周期什么是面向对象编程(类...
    99+
    2022-11-13
  • linux shell编程学习笔记(3)
    1、什么是变量保存变化的数据——变量名:名称固定,由系统预设或用户自定义——变量值:根据用户设置、系统环境变化而变化2、如何定义变量——变量名=变量的值2.1变量名的规则(1)数字、字母、下划线(2)字母区分大小写(3)当变量名相同时,后赋...
    99+
    2023-01-31
    学习笔记 linux shell
  • Python - 面向对象学习
    本节内容: 面向对象编程介绍为什么要用面向对象进行开发?面向对象的特性:封装、继承、多态类、方法、  引子你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是...
    99+
    2023-01-31
    面向对象 Python
  • 学习python的第十八天(面向对象编程
    一.面向对象编程 ​ 面向过程编程,核心是编程二字,过程指的是解决问题的步骤,即先干什么、后干什么、再干什么、然后干什么…… 与工厂的工艺流程差不多,前后都有影响 优点:复杂的问题流程化,进而简单化,调理清晰. 缺点:拓展性不行 二.对...
    99+
    2023-01-31
    面向对象 python
  • Python 3 学习笔记:流程控制
    程序结构 计算机在解决某个具体问题时,主要有三种形式,分别是顺序控制执行所有语句、选择执行部分语句和循环执行部分语句。根据以上三种解决问题的形式,程序设计过程中,也有三种基本结构,分别为顺序结构、选择结构和循环结构。 顺序控制 顺序结构很好...
    99+
    2023-01-31
    学习笔记 流程 Python
  • Python编程学习3:Python 对
    面试遇到一个问题:如何删除一个python对象?下面将介绍python的对象引用和 del删除引用1.  首先介绍下python的对象引用1)Python中不存在传值调用,一切传递的都是对象引用,也可以认为是传址调用。即Python不允许...
    99+
    2023-01-31
    Python
  • Python学习 :面向对象 -- 三大
    面向对象的三大特性 一、封装 把数据、值、变量放入到对象中 构造方法 _init_方法 特殊作用: 在 obj = 类名() 执行时: 内部自动执行两个步骤: 1、创建对象 2、通过对象执行类中的一个特殊方法(_init_方法) ...
    99+
    2023-01-30
    三大 面向对象 Python
  • python学习32(面向对象_3)
    继承 面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。即一个派生类(derived class)继承基类(bass class)字段和方法。继承也允许把一个派生...
    99+
    2023-01-31
    面向对象 python
  • JSP学习笔记(3)——域对象的属性操作
    pageContext, request,session,application 对象都有这些方法,称为域对象Object getAttribute(String name)Enumeration getAttributeNames()re...
    99+
    2023-01-31
    学习笔记 属性 对象
  • Python学习教程:面向对象学习实力讲解
    类的实现class Cat:"""猫科动物类"""tag='我是家猫 'def __init__ (self,name,age=0): #没有默认值必须要传,且写在...
    99+
    2023-06-02
  • Python学习笔记5——一切皆对象
    我发现我不适合看视频学习,看书看文字觉得更舒服,看大神的博客教程:Python快速教程——这是大神的第一篇博客,点击下一篇,一篇篇看下去,都很通俗易懂,坐看看大神是如何成长的,可以利用碎片时间看,收获很多,不再迷茫。 另外,下面的评论也很...
    99+
    2023-01-30
    学习笔记 一切皆 对象
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作