Python---方法(普通方法,类方法,静态方法)

news2024/10/7 4:29:15

专栏:python
个人主页:HaiFan.
专栏简介:Python基础已经更新完,接下来是Python面向对象的知识点。

方法

  • 前言
  • 普通方法
  • 类方法
  • 静态方法
  • 总结

前言

方法是什么?

一个类,它有特征,也有动作,特征是属性,动作是方法,我们知道如何去定义一个函数,那么,把函数写在类中,就称为方法。

  1. 类方法
  2. 静态方法
  3. 普通发放
  4. 魔术方法
  5. 等等

在这里插入图片描述

普通方法

格式:

def 方法名(self[,参数,参数]):
	pass

在这里,我们先写一个手机类,然后创建出对象。

class Phone():
    brand = 'wudi'
    price = 9999
    type = 'nb 90'
    
a = Phone()

然后在手机类中写一个call方法

class Phone():
    brand = 'wudi'
    price = 9999
    type = 'nb 90'

    def call(self):
        pass

call方法里的self是什么?
从英文上来翻译:self是自己的意思,那么我们把self打印出来会是什么呢?
在这里插入图片描述
从代码结果中可以看出,这两个的地址是相同的,可以认为:self就是a。谁调用这个call,谁就会被当作参数。

类方法

格式:

class 类名:
	@classmethod
	def 类方法名(cls):
		方法体

普通方法必须依赖于对象,self就是对象,通过对象才能去调用。
cls是class的缩写,没有对象也可以调用,这个方法的参数是类名,通过类去调用。

class Phone():

    def __init__(self,name):
        self.name = name

    def show_name(self):
        print(f'{self.name}')

    @classmethod
    def test(cls):
        print('----------test')
        print(cls.name)
        
a = Phone('lisi')
Phone.test()
a.test()

在这里插入图片描述
在调用test方法的时候,只把cls打印出来了我想在test方法里打印出对象的name属性,但是报错了。这是因为这个name属性在test方法里是无法访问的。

类方法特点:

  1. 定义需要依赖装饰器 @classmethod
  2. 类方法的参数不是一个对象,而是类print(cls)
  3. 类方法中只可以使用类属性
  4. 类方法中不能使用普通方法

对4的解释:
普通方法中调用普通方法只需要 self.方法名即可,因为他们是同级函数。那么,在类方法中写 self.方法名,那么这个self是谁?类方法的参数是 cls,在类方法中使用普通方法的的时候,这个self是不知道是什么的。

类方法的作用:

因为只能访问类属性和类方法,所以可以在对象创建之前,如果需要完成一些动作(功能)

静态方法

格式:

class Phone:
	@staticmethod
	def 方法名():
		pass

直接看代码:

class Person:
    __age = 18

    def __init__(self):
        self.name = 'lufei'
        self.food = 'shaokao'

    def show(self):
        print('------>',self.__age)

    @classmethod
    def test(cls):
        cls.__age = 100
        print('---------->类方法')
        print(cls.__age)

    @staticmethod
    def test1():
        print('-------->静态方法')
        print(Person.__age)

Person.test1()

在这里插入图片描述
静态方法:很类似于类方法

  1. 需要装饰器 @staticmethod
  2. 静态方法无需传递参数(cls,self)
  3. 也只能访问类的属性和方法,对象的是没有办法访问的
  4. 加载时机同类方法

总结

类方法和静态方法的不同之处

  1. 装饰器不同
  2. 一个有参一个无参

相同之处

  1. 只能访问类的属性和方法,对象的是无法访问的
  2. 都可以通过类名调用访问
  3. 都可以在创建对象之前使用,因为不依赖于对象

普通方法

不同之处:

  1. 没有装饰器
  2. 普通方法永远要依赖对象,因为每个普通方法都有一个self
  3. 只有创建了对象,才可以调用普通方法,否则无法调用

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

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

相关文章

华为OD机试(2023)真题目录(Java JS Python)

本专栏算法题均来自2023华为OD机考新题库。 本专栏算法题全部支持Java、JavaScript、Python语言实现。 注意:本专栏只包含新题库题目,不包含老题库题目。如果想同时拥有新、老题库全部题目,请订阅华为OD机试(2022&2023&#…

c/c++开发,C++类的常用基本函数实现案例

一、C类的常用基本函数 C类的常用基本函数主要包括:默认构造函数,普通构造函数,拷贝构造函数,析构函数,赋值(,运算符重载)函数: 1.默认构造函数,在没有显式初…

苹果电脑怎么用移动硬盘ntfs?教你三招方法

苹果电脑怎么用移动硬盘ntfs?Mac可以正常读取NTFS外置设备上的文件,但是不能够正常往里面写入文件,同样不能对上面的文件进行编辑、删除、移动等,如果想要进行这些操作。 一、什么是NTFS NTFS是一个日志文件系统,这意…

稍纵即逝,读博期间要注意的事情 / 读博期间一定不要做的事

稍纵即逝,读博期间要注意的事情 读博期间一定不要做的10件事 tip:配图除了缓解文章疲劳,就没有其它意图了。 时间稍纵即逝,博士期间的科研时间其实非常紧张和短缺。对于刚入学的博士新生,尤其是直博生和长学制&#…

DMA驱动开发---认识DMA

DMA定义: DMA用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。 DMA传输方式: DMA的作用就是实现数据的直接传输,而去掉了传统数…

Go 恶意软件增多,分析两个新发现的零检出样本

由于 Go 良好的跨平台特性,在多个操作系统与架构上都能运行,所以最近使用 Go 语言编写的恶意软件越来越多,每周都会发现大量的新样本。 在四月末,研究人员通过蜜罐发现了两个新的变种(Backdoorit和 Caligula&#xff…

AOSP 8.0 系统启动概要

目录 一、Android 系统启动流程图 二、系统启动阶段 三、 系统重要进程 3.1 父进程 3.2 重量级进程 一、Android 系统启动流程图 备注:(图片引用gityuan) 二、系统启动阶段 step1. 启动电源及系统:电源按下后,引…

家庭网络WIFI相关知识

文章目录参考资料路由器的最大下载速率WFI协议WIFI工作频段和信道2.4GHZ频段5GHz频段双频路由器兼容性覆盖WIFI信号为什么总这么差?参考资料 WiFi穿墙完全指南:你的网速是由什么决定的? 路由器的最大下载速率 所谓的450M路由器中的“450M”…

【Catalyst 9000 内嵌抓包方法】

新的一年 新的征程 新的课程开班 等你来学&#xff01; 1.在特权模式下进入如下配置 switch#monitor capture XXX interface Gix/x/x both 或 control-plan both <<<<< control-plan为CPU抓包 switch#monitor capture XXX match any 或 access-list XX swi…

4.6--贪心--最小生成树(MST)

一共有两种方法Prim算法和Kruskal算法都可以看作是应用贪心算法设计策略的例子。 Prim算法--选集合S中所有顶点的邻接点 距离最短的那个点&#xff08;不属于S&#xff09;加入集合S Kruskal算法--每次选取最短的且不构成回路的边 它们都利用了下面的最小生成树性质&#xf…

VRP系统下增加网络设备安全性之console接口

VRP即华为设备的操作系统 增加网络设备安全性的其中一种措施是增加console的安全 增强console安全性 1、使用密码登陆 首先先进入设备的console接口&#xff1a; 在进入系统视图时&#xff0c;可以使用system-view或sys 在进入console接口时&#xff0c;可以使用user-inte…

RPC的序列化方案详解

1 为什么需要序列化&#xff1f; 网络传输的数据须是二进制数据&#xff0c;但调用方请求的出入参数都是对象&#xff1a; 对象不能直接在网络传输&#xff0c;需提前转成可传输的二进制&#xff0c;且要求可逆&#xff0c;即“序列化” 将对象转换成二进制数据 这时&#xf…

拉伯证券|磷酸铁锂电池低温性能怎么解?

磷酸铁锂系电池本钱相对三元系电池低&#xff0c;且安全性好&#xff0c;寿命长。随着技能的前进&#xff0c;实践能量密度也在无限挨近理论能量密度。所以其市场占有率也在稳步上升&#xff0c;且现已超越三元系锂电池的装机量。 但磷酸铁锂&#xff08;LiFePO4&#xff0c;L…

Java网络编程 - UDP通信

文章目录UDP通信快速入门一发一收多发多收广播组播UDP通信 快速入门 UDP协议的特点: UDP是一种无连接、不可靠传输的协议。 将数据源IP、目的地IP和端口以及数据封装成数据包&#xff0c;大小限制在64KB内&#xff0c;直接发送出去即可。 UDP协议通信首先要有DatagramPacket数…

flume kafka channel 应用详解

1 官方文档 Documentation -> Flume User Guide2 kafka source (消费者) Kafka Source is an Apache Kafka consumer that reads messages from Kafka topics. If you have multiple Kafka sources running, you can configure them with the same Consumer Group so each …

2.DjangoRestFramework【基于DRF的RESTAPI的序列化使用】

进入Django rest framwork官网就能看到rest_framwork相关的教程; 1.安装rest_framwork pip install djangorestframework pip install markdown # Markdown support for the browsable API. pip install django-filter # Filtering support2.在setting中注册 setting…

QT-线性拟合(自动找直线区域)

最近有个需求&#xff0c;需要对一个S曲线的散点图做线性拟合&#xff0c;百度上线性拟合和曲线拟合公式很多&#xff0c;没什么问题&#xff0c;但需求里面有一个预期就是自动找出直线部分&#xff0c;前面因为其它事情耽搁&#xff0c;一直没有实现&#xff0c;心里多少有点梗…

SpringBoot微服务项目,转发并响应下载请求

在微服务项目中&#xff0c;我经常会碰到从一个微服务项目转发下载请求并实现下载文件的需求&#xff0c;因此在此做一个转发下载的示例。总的下载转发流程如下&#xff0c;我会按照这个流程一一介绍下载流程。 1、客户端的下载请求 这里主要介绍controller层是如何接收客户端…

apple pencil一代平替笔有哪些?平替电容笔推荐

当今社会&#xff0c;高科技推动了数字产品的发展。无论是在工作中&#xff0c;还是在学习中&#xff0c;大的屏幕都能让画面变得更清楚。不管是现在还是未来&#xff0c;Ipad设备都会变成我们每天的一个重要组成部分。如果ipad与一款易于使用的电容笔相结合&#xff0c;将会大…

git-secret:在 Git 存储库中加密和存储密钥(下)

在本篇文章中&#xff0c;将带你了解如何在 Docker 容器中设置git-secret和gpg&#xff0c;通过 Makefile recipe 为不同的场景创建工作流。 Makefile Adjustment 将git-secret和gpg指令添加到 Makefile 中.make/01-00-application-setup.mk&#xff1a; # File: .make/01-0…