首页 > 编程语言 >记录python:类方法

记录python:类方法

时间:2024-04-20 10:12:21浏览次数:28  
标签:变量 记录 python instance 实例 variable 方法 class

类方法确实可以访问和修改类变量,因为它们属于类本身而不是任何特定的实例。然而,类方法不能直接访问实例变量,因为这些变量是特定于类的每个实例的。实例变量是由类的实例(即对象)创建的,而类方法是在类级别上定义的,并不与任何特定的实例直接关联。

下面是一个例子,它演示了类方法如何访问和修改类变量,以及为什么类方法不能直接访问实例变量:

class MyClass:  
    class_variable = "Class variable"  # 类变量  
  
  def __init__(self, instance_variable):  
      self.instance_variable = instance_variable  # 实例变量  

  @classmethod  
  def modify_class_variable(cls, new_value):  
      cls.class_variable = new_value  # 类方法修改类变量  

  @classmethod  
  def try_to_access_instance_variable(cls):  
      # 类方法尝试访问实例变量会失败,因为没有提供实例的引用  
      # 下面的代码会引发 AttributeError,因为 cls 没有 instance_variable 属性  
      print(cls.instance_variable)  

# 创建类的实例  
instance = MyClass("Instance variable")  
  
# 修改类变量  
MyClass.modify_class_variable("New class variable")  
print(MyClass.class_variable)  # 输出: New class variable  
  
# 尝试通过类方法访问实例变量(这会失败)  
# MyClass.try_to_access_instance_variable()  # 这会引发 AttributeError  
  
# 正确的做法是通过实例来访问实例变量  
print(instance.instance_variable)  # 输出: Instance variable

在上面的例子中,modify_class_variable是一个类方法,它可以成功修改class_variable,因为class_variable是类的一个属性。然而,try_to_access_instance_variable类方法尝试访问instance_variable时会失败,因为instance_variable是实例的属性,不是类的属性。尝试通过类对象cls来访问instance_variable会抛出AttributeError,因为cls(即类本身)并不包含instance_variable。

如果你确实需要在类方法中访问实例变量,你必须通过类的实例来传递这个变量。这通常不是类方法的使用场景,因为类方法的设计初衷就是独立于实例的。如果你需要访问实例变量,你应该考虑使用实例方法而不是类方法。

标签:变量,记录,python,instance,实例,variable,方法,class
From: https://www.cnblogs.com/leo130-blogs/p/18147238

相关文章

  • python中的时间转换,秒级时间戳转string,string转时间
    importtimeimportdatetimedefpaserTime(timestamp):t=time.time()f=time.localtime(timestamp/1000)print(t)#原始时间数据#print(int(t))#秒级时间戳print(int(round(t*1000)))#毫秒级......
  • 利用python收发MQ
    一、收发MQ基础引入stomp包,#-*-coding:utf-8-*-importstompimporttime,randomfromcmd.utilimporttimePaserport=700ip='10.13.69.16'passcode='8JiPUndN'queue_name='/topic/SampleQueue'topic_name='/topic/cweb.t......
  • 涛思数据 TDengine 征稿— 利用python脚本做TDengine性能测试
    【本文正在参与“拥抱开源|涛思数据TDengine有奖征稿】https://marketing.csdn.net/p/0ada836ca30caa924b9baae0fd33857c设备上传的数据具有很明显的物联网特点,通常是时序性的,按时间先后顺序上报,而且写入后,几乎不会修改,主要是查询和统计。针对这些特点,时序数据库TDengine将......
  • Edge崩溃(Edge错误代码STATUS_ACCESS_DENIED的修复方法)
    0.问题今天由于在编写自动化脚本,edge浏览器自动填充表单功能十分烦人,会导致测试失败遂在选择每次关闭时清除浏览数据时,全选了所有选项(后来发现实际上只需要删除自动填充表单即可)然后重启edge后,坏事来了,首先旁边提示...扩展出错,请重新加载,而且所有网页(包括setting......
  • 【开源】使用Python+Flask+Mysql快速开发一个用户增删改查系统
    项目演示项目本身很简单,增删改查是几乎所有系统的骨架。正所谓万丈高楼平地起,学会了增删改查,航母就指日可待了:),光速入门,直接看演示图:项目地址https://github.com/mudfish/python-flask-user-crudFlask框架介绍说白了就是一个Web框架,能够让你快速开发出Pythonweb应用。简单易......
  • python --二分法学习
    deffound_number(need_vaule,l):print(l)mid_index=len(l)//2mid_value=l[mid_index]print("mid_valueis%s"%(mid_value))ifmid_value>need_vaule:l=l[:mid_index]print('needtofind1')......
  • springboot java调用flask python写的
    服务a用flask,服务b用的springboot,服务a写的接口,用python很容易就调通了,java来调,坑有点多1、url最后的斜杠必须两边对应上,否则flask会先308,而且contenttype[text/html;charset=utf-8],连对应的HttpMessageConverter都没有org.springframework.web.client.RestClientException:......
  • wifi解析方法(简易版,未成功)
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18032045出自【进步*于辰的博客】目录1、完整代码2、改成方案3、不成功原因此方法本人尝试未成功,既然未成功,为何我还要发布出来?两个原因:让我对wlan的连接有了初步的了解......
  • python 正则表达式匹配
    re模块: 案例:     python的贪婪和非贪婪 r的作用: ......
  • python 修改jenkins的配置文件
    python有jenkins获取配置文件的api,也有修改配置文件的api,下面介绍下如果修改jenkinsjob的配置文件内容:importreimporttimeimportjenkinsjenkins_url="http://xxx.com/jenkins"username="zhangsan"token="1.......de"jenkins=jenkins.Jenkins(jenkins_url,us......