Python 面向对象(类)

news2025/1/13 7:54:46

目录

面向对象理念

面向对象三大特性 

定义类

格式

创建对象(实例化一个对象)

创建方法

实例方法

类方法

 静态方法

self含义

对象属性

添加获取对象属性

​编辑

类里面获取对象属性

继承

单继承

多继承

多态


面向对象理念

面向对象编程(Object-Oriented Programming,简称OOP)是一种常用的编程范式,它将程序中的数据和操作数据的方法组织在一起,形成对象,通过对象之间的交互来实现程序的功能。

    类:描述具有相同属性和方法的集合,简单来说就是一个模板,通它来创建对象。

    对象:类的实例。

    方法:类中定义的函数。

    类变量:定义在类中且在函数之外的变量,在所有实例化对象中公用。

    局部变量:方法中定义的变量,只作用于当前实例。

面向对象三大特性 

    封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式,提高复用性和安全性。

    继承:一个类继承一个基类便可拥有基类的属性和方法,可提高代码的复用性。

    多态:父类定义的引用变量可以指向子类的实例对象,提高了程序的拓展性。

设计一个类的三要素:

类名,这类事物的名字,大驼峰命名法,例如CapWords,单词之间不使用下划线

属性,这类事物具有什么样的特征

方法,这类事物具有什么样的行为

__方法名__格式的方法是python提供的内置方法/属性

定义类

面向对象是更大的封装,在一个类中包含多个方法(函数)

格式

class 类名:
    
    pass

创建对象(实例化一个对象)

class Person:
    pass


tom = Person()
print(tom)

定义一个类    Person

创建了一个对象   tom

创建方法

  • 实例方法(self):    类和实例的属性和方法都可以访问调用
  • 类方法(cls):         只能使用类属性和方法, 不能使用实例属性和方法
  • 静态方法(static):  类属性方法和实例属性方法都不能使用, 只是依附于该类,相当于独立函数

实例方法

实例方法中的第一个参数是 self,表示实例本身。def定义方法后,会在括号内自动补全 self

class Person:
    def eat(self):
        print("吃了冰淇淋")

    def run(self):
        print("跑了5公里")


tom = Person()
tom.eat()
tom.run()

一个 Person 类,包含了两个方法:eat 和 run

 对象 tom 调用了 eat run 的方法

类方法

类方法中的第一个参数是 cls,表示类本身,类方法可以通过类对象和实例对象进行调用。

定义方法后,在括号内会自动补全  cls 

使用 @classmethod 装饰器

class Car:
    @classmethod
    def describe(cls, color, brand, city):
        print("这是一个类方法", f"这是一辆{city}产的{color}的{brand}轿车")

Car.describe("黑色", "大众", "德国")

 静态方法

默认没有第一个参数,什么也不接收。静态方法是定义在类中的方法,它不需要访问类的实例或实例的属性。它可以通过类名直接调用,而无需创建类的实例。静态方法通常用于执行与类相关但独立于实例的操作。

使用  @staticmethod  装饰器 

class MathUtils:
    @staticmethod
    def multiply(x, y):
        return x * y

result = MathUtils.multiply(2, 3)
print(result)

self含义

self指的是调用该类的对象(是一个实例),是一个python自动会给传值的参数

哪个对象执行方法,self就是谁。

例如

obj1.fetch('haha')         self就是obj1

obj2.fetch('hehe')         self就是obj2

对象属性

添加获取对象属性
对象名.属性名

观察下方示例:

class Washer:
    def wash(self):
        print("洗衣服")

haier = Washer()
haier.wash()
haier.width = 400
haier.height = 600
print(f"洗衣机的长宽是{haier.width}, {haier.height}")

haier.width = 400 和 haier.height = 600  就是定义了一个对象的属性

类里面获取对象属性

观察下方示例:

class Washer:
    def info(self):
        print(F"洗衣机的宽度是{self.width}, 高度是{self.height}")


haier = Washer()
haier.width = 400
haier.height = 600
haier.info()

self.width 和 self.height 就相当于haier.width 和 haier.height。
即self就是该类的对象

继承

单继承

子类拥有父类的所有属性和方法

代码示例

class Animal:
    def eat(self):
        return "吃食物---"
    def run(self):
        return "跑---"

class Dog(Animal):
    def bark(self):
        return "汪汪叫:wangwang~"

class Cat(Animal):
    def mioaomiao(self):
        return "喵喵叫"


animal = Animal()
print(f"动物的天性就是: {animal.eat()}, {animal.run()}")

dog = Dog()
print(f"狗的天性除了: {dog.eat()}, {dog.run()},还会{dog.bark()}")

cat = Cat()
print(f"猫的天性除了: {cat.eat()}, {cat.run()},还会{cat.mioaomiao()}")

 定义了一个动物类:Animal,其包含两个方法:eat  run

 定义了一个狗类:Dog,继承其父类 Animal,这样狗的这个类就拥有了其父类(Aniaml)的eat  run 方法

 同理定义了一个猫类:Cat,继承其父类 Animal,这样狗的这个类就拥有了其父类(Aniaml)的eat run 方法

多继承

和单继承同理,格式参考如下:

class 类名(父类1,父类2):
    pass

 代码示例

class Man:
    def father(self):
        print("父亲叫张航")


class Women:
    def mother(self):
        print("母亲叫王丽")


class Son(Man, Women):
    def son(self):
        print("我叫张宇")


son_name = Son()
son_name.son()
son_name.father()
son_name.mother()

Son 这个类继承了父类 Man 和 Women之后,便拥有了他俩的方法 

多态

" 多态 " 指的是 相同类型不同 对象 完成 某个行为时 , 会得到不同的状态 ;

多态是面向对象编程中一个重要的概念,它允许不同类型的实例在调用相同方法时表现出不同的行为,提高了程序的灵活性和可扩展性

" 多态 " 是通过继承关系 实现的 

观察下方示例:

class Voice:
    def say(self):
        print('动物基本的发声频率:', end=' ')


class People(Voice):
    def say(self):
        super().say()
        return '嘤嘤嘤'


class Dog(Voice):
    def say(self):
        super().say()
        return '汪汪汪'


class Cat(Voice):
    def say(self):
        super().say()
        return '喵喵喵'

voice = Voice()
voice.say()
print()
people = People()
print(f"人的发声频率:{people.say()}")

dog = Dog()
print(f"狗的发生频率:{dog.say()}")

cat = Cat()
print(f"猫的发生频率:{cat.say()}")

创建了一个父类:Voice,并调用它的 say()方法

定义了三个子类:People、Dog、Cat类 ,指定父类 Voice

调用PeopleDogCat类的 say()方法时,使用super().say()语法同时调用父类Voice类的say()方法

输出:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1401428.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day01.基础知识

目录 一.函数与语句 1.1进入C 1.1.1main( )头函数 1.1.2 注释 1.1.3头文件 1.1.4预处理 1.1.5命名空间 1.1.6输入与输出 1.1.7格式化 1.2语句 1.2.1声明语句与变量 1.2.2赋值语句 1.3函数 1.3.1使用有返回值的函数 一.函数与语句 1.1进入C 1.1.1main( )头函数 …

手机也能随时随地玩红警啦!

还在为找不到红警安装包苦恼吗? 现在可以随时随地,无论手机、ipad、电脑都可以无需安装包在线玩红警啦!! 不仅能本地单机玩耍,还能联网玩耍(可以和老外一起玩哦~) 具体在线链接可…

Python中函数的4种参数形式

默认参数的特点是在声明函数时使用“”来指定默认值。缺省参数指因为程序使用了默认值,使得函数调用时不必写出全部参数。 关键字参数可以摆脱位置匹配的限制,直接用变量名匹配。可变参数用于处理任意数量的参数,形参中带一个*,将…

JS加密/解密之一个少见的js解密

直接上源代码 (function(){var tfK,EAc715-704;function JQI(d){var q514800;var yd.length;var i[];for(var v0;v<y;v){i[v]d.charAt(v)};for(var v0;v<y;v){var pq*(v245)(q%31355);var eq*(v264)(q%20133);var kp%y;var oe%y;var mi[k];i[k]i[o];i[o]m;q(pe)%3352359…

ArcGIS初始化软件界面Normal.mxt

ArcGIS有时候永久了&#xff0c;或者呢突然不自觉软件界面乱了&#xff0c;或者一些窗口打开却找不到&#xff01; 这时候可以去删除arcgis的界面配置文件&#xff0c;Normal.mxt 删除后再打开软件&#xff0c;软件界面就会回到初始化设置了&#xff01; 文件所在的路径&…

普兰资产(PLAN B KRYPTO ASSETS):Schutz AI 公链引领数字资产新时代

比特B ETF是金融技术革命的起始 普兰资产&#xff08;PLAN B KRYPTO ASSETS&#xff09;执行长Jonah Fischer指出&#xff0c;比特B ETF 仅是迈向金融领域技术革命的首个阶段。他认为比特B现货 ETF 提供了投资者接触年轻且具有风险性的资产的途径&#xff0c;但他强调区块链技术…

【趣味题-06】20240121 三色球

36.有红、黄、白三种球共160个.如果取出红球的1/3&#xff0c;黄球的1/4&#xff0c;白球的1/5&#xff0c;则还剩120个&#xff1b; 如果取出红球的1/5&#xff0c;黄球的1/4&#xff0c;白球的1/3&#xff0c;则剩116个&#xff0c; 问&#xff08;1&#xff09;原有黄球几个…

文件操作与IO(2)

Java中通过java.io.File类来对一个文件(包括目录)进行抽象的描述.注意,有File对象,并不代表真实存在该文件. File概述 我们先来看看File类中的常见属性,构造方法和方法. 属性 修饰符及类型属性说明static StringpathSeparator依赖系统的路径分隔符,String类型的表示static …

【51单片机】

0、前言 参考&#xff1a;普中 51 单片机开发攻略 第14章 1、硬件 ULN2003 芯片 2、软件 mian.c #include <reg52.h> #include <intrins.h> #include "delayms.h"typedef unsigned char u8; typedef unsigned int u16;sbit DC_MotorP1^0;void DC_Mo…

使用STM32的UART实现蓝牙通信

✅作者简介&#xff1a;热爱科研的嵌入式开发者&#xff0c;修心和技术同步精进 代码获取、问题探讨及文章转载可私信。 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。 &#x1f34e;获取更多嵌入式资料可点击链接进群领取&#xff0c;谢谢支持&#xff01;&#x1f447…

基于Unity平台开发Vision Pro应用

VisionOS是苹果最新空间计算设备Vision Pro的操作系统。Unity开发人员可以利用现有的3D场景 以及为 visionOS 构建游戏或应用程序的资产。有关 visionOS 的更多信息&#xff0c;请参阅 Apple 的 visionOS 概述。 visionOS提供了几种不同的显示应用程序的模式&#xff1a;Windo…

线性代数:逆、转置、分块、多项式 矩阵公式总结

目录 逆矩阵、转置矩阵重要公式 公式 证明 矩阵分块 基本运算 分块的逆&#xff08;主副对角线分块对角阵的逆、主副对角线上下三角分块对角阵的逆&#xff09; 例 矩阵多项式 例 克拉默法则及逆矩阵求方程组 逆矩阵、转置矩阵重要公式 公式 证明 矩阵分块 基本运…

【嵌入式移植】4、U-Boot源码分析1—Makefile

U-Boot源码分析1—Makefile 1 分析思路2 u-boot源码目录结构3 Makefile源码3.1 版本号3.2 环境变量3.3 Beautify output3.4 输出文件的目录设置、PHONY目标3.6 目录信息3.5 Source Code Checker3.7 设置单独编译模块、PHONY目标3.8 获取宿主机的架构和系统3.9 设置交叉编译工具…

课题学习(十九)----Allan方差:陀螺仪噪声分析

一、介绍 Allan方差是一种分析时域数据序列的方法&#xff0c;用于测量振荡器的频率稳定性。该方法还可用于确定系统中作为平均时间函数的本征噪声。该方法易于计算和理解&#xff0c;是目前最流行的识别和量化惯性传感器数据中存在的不同噪声项的方法之一。该方法的结果与适用…

若依管理系统搭建教程,ruoyi-vue环境搭建

环境部署 准备工作 JDK > 1.8 (推荐1.8版本) Mysql > 5.7.0 (推荐5.7版本) Maven > 3.0 运行系统 1、前往Gitee下载页面([https://gitee.com/y_project/RuoYi (opens new window)](https://gitee.com/y_project/RuoYi))下载解压到工作目录 2、导入到Eclipse&#…

JavaScript之ES6新特性02

模板字符串 模板字符串&#xff08;template string&#xff09;是增强版的字符串&#xff0c;用反引号&#xff08;&#xff09;标识。它可以当作普通字符串使用&#xff0c;也可以用来定义多行字符串&#xff0c;或者在字符串中嵌入变量 。 模版字符串特点 内容中可以直接…

C#进程间消息传递

C#是一种流行的编程语言&#xff0c;它可以用于开发Windows应用程序。在开发Windows应用程序时&#xff0c;有时需要进行进程间通信&#xff0c;以实现不同进程之间的数据传递和交互。C#提供了多种方式来进行进程间消息传递&#xff0c;包括管道、共享内存、消息队列等。在本文…

chapter11-实战成绩通知短信系统(上)

恭喜各位同学&#xff01;当你看到这篇文章的时候&#xff0c;意味着你已经从刚开始的“一无所知”&#xff0c;变成了现在的“爬虫新手”&#xff01;在之前的文章中&#xff0c;我们从最基础的知识点讲起&#xff0c;一步一步的学习了怎么使用Python爬取我们想要获取的信息&a…

Angular系列教程之模板语法

文章目录 前言一、模板语法基础二、模板指令三、模板表达式四、模板语法示例五、注意事项五、总结 前言 Angular是一款流行的前端开发框架&#xff0c;它提供了许多功能和工具来简化前端开发过程。其中&#xff0c;模板语法是Angular中一个非常关键的组成部分&#xff0c;它可…

Leveraging Unlabeled Data for Crowd Counting by Learning to Rank

无标签人群技术&#xff0c;作者引入了一种排名。 利用的是一个图的人群数量一定小于等于包含这个图的图 生成排名数据集 作者提出了一种自监督任务&#xff0c;利用的是一个图的人群数量一定小于等于包含这个图的图 流程&#xff1a; 1.以图像中心为中心&#xff0c;划分一…