首页 > 编程语言 >基于python中的静态方法,类方法以及类变量的用法

基于python中的静态方法,类方法以及类变量的用法

时间:2022-11-21 08:00:11浏览次数:64  
标签:None 静态方法 变量 python self 用法 实例

基于python中的静态方法,类方法以及类变量的用法

最近在做scada系统的自动化部署,采用python语言,在开发过程中用到了,静态方法,类方法,以及类变量,下面就这个特殊的用法做个总结

1 类方法

在python中类方法使用装饰器@classmethod关键字类修饰;并且它的第一个参数是隐式参数cls,这个参数其实就式类本身,相当于C++中的this。这个隐士参数在我们调用类方法的时候,是不需要传入的。
什么情况下会用到类方法呢?
1.采用工厂模式:就是如果我们通过不同的传参,能实例化不同的类对象
2.无需修改__init()初始化函数就可以实现。
下面我们看一个实例:

class mtcomm:
  def __init__(self,mchine_no,name):
    self.mchineNo = machine_no
    self.name = name
  @classmethod
  def machine_mtcomm(cls,machine_no,name='one'):
    return cls(machine_no,name)

machineOne = mtcomm.machine_mtcomm(1)
machineOne = mtcomm.machine_mtcomm(2,'two')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

上面的实例中定义个一个machine_mtcomm的类方法
所有的mtcomm接口都可以通过这个类方法实现实例化,相当于一个工厂类。通过传递不同的参数实例化不同的对象。

2 静态方法

在python的静态方法跟C++的静态成员函数相似。python中用@staticmethod关键字修饰
静态方法与常规的函数方法有什么区别
静态方法属于类本身,不会实例化到对象,而常规的成员函数是需要通过实例化对象来调用的。
什么情况下会要使用静态方法呢?
当这个函数只有这个类调用,其他地方没有调用,单独放到其他地方有显得多余,这个时候我们就使用静态方法
下面我们看一个例子

class MtCmd:
 @staticmethod
 def getuser():
     '''
     获取当前进程用户,windows下默认用windos表示
     '''
     if sys.platform=='win32':
         return 'windos'
     else:
         return pwd.getpwuid(os.getuid())[0]
 @staticmethod
 def getgroup(user:str=None)->str:
     '''
     获取指定用户的所属的组
     若user为None则获取当前进程用户所属的组
     '''
     if sys.platform=='win32':
         return 'windos'
     elif user is None:
         user = MtCmd.getuser()
     try:
         gid = pwd.getpwnam(user)[3]
         return grp.getgrgid(gid)[0]
     except KeyError as e:
         logging.error('user [%s]->%s',user,e)
         return None
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

这个类定义了两个静态方法函数,一个是getuser(),一个是getgroup()因为这两个函数,只有mtcmd这个类会调用,其他地方不会调用,因此用到静态方法。

3 类变量

在python中类变量实际上跟C++中的静态变量比较类似,既然是类变量,这个这个变量属于类本身,因此它不属于实例化对象,也只能被类所调用.
类变量定义在类的定义之后,实例变量则是以为self.开头
下面举个例子:

class MtInstall:
  ENVS       = {'物理机':PM_T,'虚拟机':VM_T}
  KEYS       = ['基础环境','机器号','型号','机器名','端口配置']
  _func      = None

def init(self):
self.values = {}
self.senseType = None
self.machineNum = None
self.envType = [] # 环境类型
self.machineNos = [] # 机器号

env = MtInstall.ENVS.get("物理机",None)#类变量调用
mtInstall = MtInstall()
machineNo = mtInstall.machineNum#实例化对象调用成员变量

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

上面的实例中ENVS KEYS _func都属于类变量,通过类本身调用,machineNum是常规的成员变量,通过实例化对象调用。

标签:None,静态方法,变量,python,self,用法,实例
From: https://www.cnblogs.com/clark1990/p/16910249.html

相关文章

  • python-opencv抓取RTMP
    opencv安装sudoapt-getinstallpython3-opencv源码安装https://blog.csdn.net/u011922698/article/details/123268143pip3installopencv-python#安装opencvpip3......
  • 接口中定义静态方法和默认方法(JDK8)
    JAVA8之前,接口里的方法要求全部是抽象方法。JAVA8(含8)之后,以后允许在接口里定义默认方法和静态方法。JDK8新特性_默认方法Java8及以上新版本,允许给接口添加一个......
  • StringTokenizer基本用法
    简介StringTokenizer是一个快速分割字符串的工具类基本用法//默认使用"\t\n\r\f"作为分隔符,将str进行分割publicStringTokenizer(Stringstr){this(str,......
  • Python学习笔记:timedelta类相关函数
    一、介绍timedelta类表示时间差,可以直接实例化,也可以由两个datetime类型的数据作差得到。缘起于求两个时间差,并需要转换为特定的单位(天、小时、分钟等),遂产生此需求。......
  • static-静态方法和工具类
    什么叫静态方法特点和调用方式工具类定义:帮助我们做一些事情的,但是不描述任何事物的类已经学习过的类工具类的使用规则练习实操类--ArrayUtilpack......
  • python中pip install -U -i是个啥意思?
    比如说:pipinstall-Ucelery-ihttps://pypi.tuna.tsinghua.edu.cn/simple这里面,-U代表的是升级原来已经安装的包,不带U不会装新版本,带上U才会更新到最新版本......
  • python函数进阶
    #1.函数的作用域#全局变量的作用域:#一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量。#全局变量所有作用域都可用,局部变量只能在本函数可......
  • 为了删除数万封邮件,使用python模拟鼠标自动点击删除
    公司的企业邮箱有段时间不知道为啥没有删除服务器上的邮件,屯了几万封。登陆企业邮网站,又不好清空邮箱,只能每次一页删除100封,光靠鼠标在那里点,真的费时费力。于是写了个pyth......
  • python爬取招聘网岗位(仅供学习)
    1、某某**集招**信息2、使用到了requests,bs4,openpyxl,time模块(1)分析页面,发送请求,并把请求返回定义为一个模块。url='https://***.*****.com/company/{0}/jobs/?n={1}'.f......
  • PYTHON编写程序练习-打印99乘法表
     使用for循环嵌套的知识点编写foriinrange(1,10):  #第一层循环,循环乘数forjinrange(1,i+1):  #第二层循环,循环被乘数print(f"{i}x{j}="+......