我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

概述

面向对象编程(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))

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

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

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

Python的面向对象编程方式学习笔记

类与实例 类与实例相互关联着:类是对象的定义,而实例是“真正的实物”,它存放了类中所定义的对象的具体信息。 下面的示例展示了如何创建一个类:class MyNewObjectType(bases):''' 创建 MyNewObjectTyp
2022-06-04

PHP学习笔记:面向对象编程基础

导言:面向对象编程(Object-Oriented Programming,简称OOP)是一种编程的思维方式,通过将问题分解为多个对象并定义对象之间的交互,来解决复杂的编程问题。PHP作为一门功能强大的编程语言,也支持面向对象编程。本文将介
2023-10-21

js 面向对象学习笔记

这篇文章主要介绍了js 面向对象,需要的朋友可以参考下
2023-05-18

python学习笔记:第17天 面向对象

一、类与类之间的依赖关系⼤千世界, 万物之间皆有规则和规律. 我们的类和对象是对⼤千世界中的所有事物进⾏归类. 那事物之间存在着相对应的关系. 类与类之间也同样如此. 在⾯向对象的世界中. 类与类中存在以下关系:依赖关系关联关系组合关系聚合
2023-01-30

python学习笔记:第16天 面向对象

目录 ⼀、类的成员介绍: 二、类的成员-变量 三、类的成员-方法 四、类的成员-属性 五、私有属性 ⼀、类的成员介绍:⾸先,
2023-01-30

Python面向对象编程中关于类和方法的学习笔记

类和实例 python是一个面向对象的语言,而面向对象最重要的概念就是类和实例, 记得刚学习的时候不太理解这些概念,直到老师说了一句”物以类聚”. 没错就是类, 归类 物以类聚 类其实就是把一些相同特性的事物归成一类, 比如人class P
2022-06-04

Scala 学习之面向对象(3)

==> 类        ---> 类的定义class Student{    // 定义属性    private var stuName:String = "Tom"    private vat stuAge:Int = 18    
2023-01-31

Python - 面向对象学习

本节内容: 面向对象编程介绍为什么要用面向对象进行开发?面向对象的特性:封装、继承、多态类、方法、  引子你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是
2023-01-31

linux shell编程学习笔记(3)

1、什么是变量保存变化的数据——变量名:名称固定,由系统预设或用户自定义——变量值:根据用户设置、系统环境变化而变化2、如何定义变量——变量名=变量的值2.1变量名的规则(1)数字、字母、下划线(2)字母区分大小写(3)当变量名相同时,后赋
2023-01-31

学习python的第十八天(面向对象编程

一.面向对象编程​ 面向过程编程,核心是编程二字,过程指的是解决问题的步骤,即先干什么、后干什么、再干什么、然后干什么……与工厂的工艺流程差不多,前后都有影响优点:复杂的问题流程化,进而简单化,调理清晰.缺点:拓展性不行二.对于我之前写的一
2023-01-31

Python学习 :面向对象 -- 三大

面向对象的三大特性一、封装把数据、值、变量放入到对象中 构造方法 _init_方法 特殊作用: 在 obj = 类名() 执行时: 内部自动执行两个步骤:1、创建对象 2、通过对象执行类中的一个特殊方法(_init_方法)class inf
2023-01-30

python学习32(面向对象_3)

继承面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。即一个派生类(derived class)继承基类(bass class)字段和方法。继承也允许把一个派生类
2023-01-31

Python编程学习3:Python 对

面试遇到一个问题:如何删除一个python对象?下面将介绍python的对象引用和 del删除引用1.  首先介绍下python的对象引用1)Python中不存在传值调用,一切传递的都是对象引用,也可以认为是传址调用。即Python不允许程
2023-01-31

Python学习教程:面向对象学习实力讲解

类的实现class Cat:"""猫科动物类"""tag=我是家猫 def __init__ (self,name,age=0): #没有默认值必须要传,且写在前面self.name=nameself.__age=age #私有变量,外部不
2023-06-02

Python面向对象编程

面向对象最重要的概念就是类(Class)和实例(Instance),Java比较熟了,下面贴代码注释 class Student(object): def __init__(self, name, score): sel
2023-01-30

Python-面向对象编程

面向对象最重要的概念就是类(Class)和实例(Instance),类是抽象的模板,比如人类、动物类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。以人类为例,创建一个实例为 xiaoming
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录