当前位置: 首页 > news >正文

实例方法、类方法、静态方法、实例属性、类属性

背景:今天在复习类相关知识的时候,突然想到这几种类型的方法的区别和用法,感觉有点模棱两可,于是总结一下,加深记忆。

定义:想要区别和理解几种方法,首先要定义一个类,要在类中加深理解和记忆。

先看一下实例属性和类属性的定义,有助于理解后面的几种方法。

# here put the import libclass Dogs(object):# 类属性belongTo = "Animals"def __init__(self, name):#实例属性self.name = namedog1 = Dogs("Sunny Chen")print(Dogs.belongTo)  # 类属性通过类访问print(dog1.name)  # 实例属性通过实例访问print(dog1.belongTo)  #类属性也可以被实例访问# print(Dogs.name)  # 但是实例属性无法被类访问

几种方法的区别:

一、类方法:

class CLanguage:#类构造方法,也属于实例方法def __init__(self):self.name = "C语言中文网"self.add = "http://c.biancheng.net"#下面定义了一个类方法@classmethoddef info(cls):print("正在调用类方法",cls)

总结:类方法定义的时候需要用到装饰器(@classmethod),参数是cls,类方法可以使用类名直接调用,当然也可以使用实例对象来调用(通常不建议)。另外还有一点就是类方法是可以访问类属性的,但是无法访问实例属性。

 二、实例方法:

class CLanguage:#类构造方法,也属于实例方法def __init__(self):self.name = "C语言中文网"self.add = "http://c.biancheng.net"# 下面定义了一个say实例方法def say(self):print("正在调用 say() 实例方法")

总结:实例方法定义的时候没有装饰器,第一个参数是self,实例方法不能由类直接调用,需要创建实例对象来调用,实例方法既可以改变类属性,也可以改变实例属性

 三、静态方法

#全局变量
gloab_num=0class TestMothod:#类属性name='ceshi01'target='test mothod'#实例属性,第一个参数是selfdef __init__(self,num,total,function):self.num=numself.total=totalself.function=function@staticmethoddef static_function(arg1,arg2):print(arg1,arg2)print(gloab_num)

总结:需要加装饰器(@staticmethod),参数没有限制,和正常的函数无异,只是无法访问类属性和实例属性,但是可以访问全局变量。既可以使用类调用静态方法也可以用实例对象调用静态方法。

静态方法是类中的"函数”。静态方法主要是用来存放逻辑性的代码,逻辑上属于类,但是和类本身没有关系,也就是说在静态方法中,不会涉及到类中的属性和方法的操作。可以理解为,静态方法是个独立的、单纯的函数,它仅仅托管于某个类的名称空间中,便于使用和维护。

http://www.lryc.cn/news/58820.html

相关文章:

  • 数据结构---二叉树
  • CMake——从入门到百公里加速6.7s
  • 无公网IP,在外公网远程访问RabbitMQ服务「内网穿透」
  • Node【二】NPM
  • 【2023最新】超详细图文保姆级教程:App开发新手入门(2)
  • sftp使用
  • FastGithub---------不再为访问github苦恼
  • Spring Boot AOP @Pointcut拦截注解的表达式与运算符
  • 2023年第十四届蓝桥杯javaB组省赛真题
  • CefSharp.WinForms 112.2.70最新版体验
  • leetcode每日一题:数组篇(1/2)
  • 每个企业经营者都应该了解的几个网络安全趋势
  • IDEA操作MongoDB快速上手开发
  • 从FPGA说起的深度学习(六)-任务并行性
  • 5.39 综合案例2.0 - STM32蓝牙遥控小车4(体感控制)
  • Scala之面向对象
  • 深度学习目标检测项目实战(四)—基于Tensorflow object detection API的骨折目标检测及其界面运行
  • 嵌入式工程师如何快速的阅读datasheet的方法
  • (三)合约广告
  • 【Android -- 软技能】分享一个学习方法
  • Python-DQN代码阅读(10)
  • MongoDB入坑
  • 【论文总结】针对操作系统级虚拟化的抽象资源攻击
  • C# 提取 PDF 文档中的文本
  • mac如何升级node版本、切换node版本
  • 一位大专学历的女程序员要求月薪25K,学历重要吗?来看看面试过程
  • ESP32驱动1.28寸GC9A01播放视频(一、视频分辨率的调整和视频格式的转换)
  • epoll的LT模式(水平触发)和ET模式(边沿触发)
  • Java基础面试20题
  • Java面向对象封装