@classmethod及@staticmethod方法浅析【python】

目前对于python中@classmethod 类方法和@staticmethod静态方法的有了一定的认识,之后有进一步的认识后继续记录。

@classmethod :是和一个class类相关的方法,可以通过类货类实例进行调用,并将该class对象(不是class的实例对象)隐式地当作第一个参数传入。

@staticmethod

:基本上和一个全局函数差不多,可以通过类或者类的实例对象进行调用,不会隐式地传入任何参数。

区别

:类方法需要额外的类变量cls,调用类方法传入的类变量cls是子类,而不是父类。类方法和静态方法都可以通过类对象和类的实例对象访问。

示例如下:

 1 class Myclass(object):
 2
 3     var = "test for myclass"
 4
 5     @classmethod
 6     def clsmethod(cls):
 7         print cls.var
 8
 9     @staticmethod
10     def sticmethod():
11         print MyClass.var

  虽然两者输出结果相同但是类方法已经隐式地传入了当前的类作为参数,可以直接调用类方法直接输出,而静态方法则需绑定。

  另外一个显然的对比例子如下:

 1 class ParentClass(object):
 2
 3     var = "test for parent"
 4
 5     @classmethod
 6     def clsmethod(cls):
 7         print cls.var
 8
 9 class SubClass(ParentClass):
10
11     var = "test for sub"

  此时ParentClass.clsmethod输出为 “test for parent”,而Subclass.clsmethod输出为“test for sub”,通过此比较很好的诠释了@classmethod类方法隐式传入的第一个参数是当前类,而不是父类。同时类方法操作的是class 类对象提供的内部信息。而staticmethod可以作为一般的工具函数来使用。

时间: 2024-11-23 19:04:33

@classmethod及@staticmethod方法浅析【python】的相关文章

python中classmethod与staticmethod的差异及应用

类中三种函数的应用 #!/usr/bin/env python # -*- coding: utf-8 -*- class TClassStatic(object): def __init__(self, data): self.data = data def printself(*arg): # for item in arg: # print item.data print("printself: ", arg) @staticmethod def smethod(*arg): p

day 封装,面向对象,@property @classmethod @staticmethod方法

一.封装 # 面向对象的三大特性 : 继承 多态 封装# 封装 : # 广义上的 # 狭义上的 :会对一种现象起一个专门属于它的名字 # 把一堆东西装在一个容器里 # 函数和属性装到了一个非全局的命名空间 -- 封装# class A:# __N = 'aaa' # 静态变量## print(A.__N) # python# pulic 公有的# private 私有的 # java完全面向对象的语言# public 公有的# protect 保护的# private 私有的 # 定义一个私有的

Python 中的 classmethod 和 staticmethod

类中最常用的方法是实例方法, 即通过通过实例作为第一个参数的方法. 举个例子,一个基本的实例方法就向下面这个: class Kls(object): def __init__(self, data): self.data = data def printd(self): print(self.data) ik1 = Kls('arun') ik2 = Kls('seema') ik1.printd() ik2.printd() 这会给出如下的输出:arunseema 然后看一下代码和示例图片:

python的@classmethod和@staticmethod

本文是对StackOverflow上的一篇高赞回答的不完全翻译,原文链接:meaning-of-classmethod-and-staticmethod-for-beginner Python面向对象编程中,类中定义的方法可以是@classmethod 装饰的类方法,也可以是@staticmethod 装饰的静态方法,用的最多的还是不带装饰器的实例方法.为方便,在下文中用@classmethod装饰的类方法将直接用@classmethod来表述,@staticmethod同理,望读者在阅读时自行

python类方法@classmethod与@staticmethod

目录 python类方法@classmethod与@staticmethod 一.@classmethod 介绍 语法 举例 二.@staticmethod 介绍 语法 举例 python类方法@classmethod与@staticmethod 一.@classmethod 介绍 与普通的类方法有所不同的是,用@classmethod修饰的类方法不传入self实例本身,而是传入cls,代表这个类自身,可以来调用类的属性,类的方法,实例化对象等. 语法 使用的语法也非常简单,直接在类方法上加上装

Python中@property和@classmethod和@staticmethod

前戏 首先,先要弄清楚一个类里面的,各个组成部分都应该怎么称呼. - 注:可能叫法会不太一样. 关于@property 顾名思义:它的意思为'属性'. 作用: 1:使用它你将会把类方法,变为类属性.并且是只读属性. 2:它会重新实现getter和setter方法. 看代码: class Person: def __init__(self,first_name,last_name): self.first_name = first_name self.last_name = last_name @

4月16日 python学习总结 封装之property、多态 、classmethod和staticmethod

一.封装之property @property把一个函数伪装成一个数据类型  @伪装成数据的函数名.setter   控制该数据的修改,修改该数据时触发 @伪装成数据的函数名.delect  控制该数据的删除,删除该数据时触发 class People: def __init__(self,name): self.__name=name @property #将name()函数伪装成一个数据属性name def name(self): #obj.name print('您现在访问的是用户名...

话说最近CMDB项目中遇到的问题整理:类方法:classmethod、staticmethod

概述 最近在做一个项目:CMDB(Configuration Management Database)资产采集,由于当中涉及一个classmethod(类方法)方法,发现不会. 还有一个staticmethod(静态方法)方法一直不熟悉,所以从网上查阅的资料,加强理解,遂整理如下: @classmethod:类方法( 只在类中运行而不在实例中运行的方法) @staticmethod 经常有一些跟类有关系的功能但在运行时又不需要实例和类参与的情况下需要用到静态方法. 比如更改环境变量或者修改其他类

16 Apr 18 封装的property 多态 鸭子类型 classmethod和staticmethod

16 Apr 18 一.      封装的property BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法,如果我们将其做成一个属性,更便于理解) 成人的BMI数值: 过轻:低于18.5 正常:18.5-23.9 过重:24-27 肥胖:28-32 非常肥胖, 高于32 体质指数(BMI)=体重(kg)÷身高^2(m) 首先需要明确.bmi是算出来的,不是一个固定死的值,也就说我们必须编写一个功能,每次调用该功能都会立即计算一个值,但很明显人的bmi值听起来更像一个名词而非