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

python的静态变量和静态方法

一、静态变量和静态方法

1、静态变量和静态方法都属于类的静态成员,它们与普通的成员变量和成员方法不同,静态变量和静态方法只属于定义它们的类,而不属于某一个对象。

2、静态变量和静态方法都可以通过类名和对象进行访问。

二、静态变量示例

class StaticMenthod: count = 0          #静态变量,不需要显示的声明 
def __init__(self):     
   StaticMenthod.count += 1 
def __del__(self):     
   StaticMenthod.count -= 1 
   sMenthod = StaticMenthod()            #创建对象实例 
   sMenthod.count += 1                   #通过对象实例操作静态变量
   print(“sMenthod:%d”%(sMenthod.count)) #通过对象实例调用静态变量 
   print(“StaticMenthod:%d”%(StaticMenthod.count)) #通过类名调用静态变量

运行结果如下:

在这里插入图片描述

通过上面的测试结果可以看出通过对象实例访问静态变量和通过类名访问静态变量的结果是不一样的,由此也证明了通过对象访问实例和通过类名访问实例是互相不干扰的。

三、静态方法

1、静态方法相关描述

1》、静态方法中不需要传入self参数,因此无法访问在静态方法中访问静态实例变量。

2》、静态方法中不可以直接访问类的静态变量,但可以通过类名引用静态变量。

3》、可以通过装饰符定义静态变量。

2、静态方法示例

class StaticFunc: str = “this is static variable!” @staticmethod def static_func():     print("this is static function!") StaticFunc.static_func() sFunc = StaticFunc() sFunc.static_func() print(StaticFunc.str)

运行结果如下:

在这里插入图片描述

通过结果分析可以知道:通过对象名调用静态方法和通过类名调用静态方法的结果是没有什么区别的。

原文链接:https://blog.csdn.net/toby54king/article/details/89315313

Python----静态变量

首先,Python语言并不支持静态变量。因为Python是动态语言,不存在完全静态的变量。 

Python中,静态成员变量称为类变量,非静态成员变量称为实例变量

理解下面的代码,分析为什么结果不同

class Jingtai(object):

    Count = 0

Ja1 = Jingtai()

Ja2 = Jingtai()

Ja2.Count = 1

print(Ja2.Count,Ja1.Count)

#结果:1,0

看明白了吗?class Jingtai(object)的类变量Count的值并没有被Ja2.Count = 1这一行代码改变,类变量Count依然是0,而对象Ja2继承类的变量Count创建了一个新的Count,然后赋值为1. 

所以这里的类变量就是个静态变量。 

那么能不能改变类变量的值呢?

可以通过类名来改变类变量的值吗?

class Lei(object):    Count = 0

AB1 = Lei()

AB2 = Lei()

Lei.Count = 100 print(AB1.Count,AB2.Count)# 结果:100 100。

使用getter和setter

class Lei(object):

    Count = 0

    def get_count(self):

        return Lei.Count

    def set_count(self,item):

        Lei.Count = item

AB1 = Lei()

AB2 = Lei()

AB1.set_count(9)

print(AB1.get_count(),AB2.get_count())

#结果:9 9

原文链接:https://blog.csdn.net/Jasonmes/article/details/80620275

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【C++】libevent 、libev、 libuv 、asio、 muduo、 ace 等C++ 网络库
  • 【工具】Fiddler HTTP 抓包工具使用教程
  • 【测试】Cunit单元测试
  • 【VS linux】使用Visual Studio 2017开发Linux程序
  • 【MQTT】python MQTT客户端
  • 【STL】STL 操作
  • 【FTP】Linux中ftp的常用命令
  • 【HTTP】Linux命令行访问网页
  • 【libevent】libevent 库的使用(windows) ---编辑中
  • 【高并发】多线程之无锁队列
  • 【RAII】RAII 技术(内存安全解决技术/自动化解锁技术)
  • 【HTTP】为何HTTP使用文本描述结构和协议的趋势|HTTP协议问什么要基于文本而不是基于二进制节约带宽...
  • 【算法】递归思想
  • 【加密】OpenSSL 介绍和使用
  • 【加密】对称加密DES和非对称加密AES、数字签名
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 10个最佳ES6特性 ES7与ES8的特性
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • java概述
  • MySQL几个简单SQL的优化
  • node.js
  • PHP 小技巧
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 给github项目添加CI badge
  • 机器学习中为什么要做归一化normalization
  • 力扣(LeetCode)965
  • 聊聊sentinel的DegradeSlot
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 算法-图和图算法
  • 为什么要用IPython/Jupyter?
  • 原生 js 实现移动端 Touch 滑动反弹
  • ​2021半年盘点,不想你错过的重磅新书
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #define,static,const,三种常量的区别
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (day18) leetcode 204.计数质数
  • (八)c52学习之旅-中断实验
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (全注解开发)学习Spring-MVC的第三天
  • (四)linux文件内容查看
  • (转)Linq学习笔记
  • ******之网络***——物理***
  • .NET 通过系统影子账户实现权限维持
  • .NET中两种OCR方式对比
  • //解决validator验证插件多个name相同只验证第一的问题
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • :如何用SQL脚本保存存储过程返回的结果集
  • ??javascript里的变量问题
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)