python小知识-classmethod类方法

简介: 类方法:@classmethod装饰的方法,参数有一个隐含参数cls,表示类本身,类可以直接调用

python类提供了三种不同的方法:

  • 普通方法:参数带self, 是类实例化才能访问的方法,
  • 静态方法:@staticmethod装饰的方法,通常是与类对象无关的方法,如工具计算,类可直接调用
  • 类方法:@classmethod装饰的方法,参数有一个隐含参数cls,表示类本身,类可以直接调用

我们来看一下例子:

class Person(object):
    a = 0
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def info(self):
        print( 'name={}'.format(self.name), 'age={}'.format(self.age))
        
    def change_age(self):
        self.age = self.age + self.a
    
    @classmethod
    def add(cls):
        print("classmethod a id = ", id(cls.a))
        cls.a = cls.a + 1
        
    @classmethod
    def create_engineer(cls, name, age):
        return cls('engineer:{}'.format(name), age)
    
    @staticmethod
    def bmi(height, kg):
        return kg / height ** 2
wedo = Person('wedo', 30)
wedo.change_age()
wedo.info()
print('a = {}'.format(Person.a))

# name=wedo age=30
# a = 0

wedo2 = Person('wedo2', 35)
wedo2.change_age()
wedo2.info()
print('a = {}'.format(Person.a))

# name=wedo2 age=35
# a = 0

从上面调用例子来看,

  • wedo/wedo2是Person类的一个实例对象,
  • a是Person类属性同时所有实例共享的属性
  • name和age是类实例属性, 不同实例值可以不同。

让我们来通过类方法来修改下类属性a


Person.add()
print('a = {}'.format(Person.a))

# classmethod a id =  1644522528
# a = 1

wedo2.change_age()
wedo2.info()
print('a = {}'.format(Person.a))

wedo.change_age()
wedo.info()
print('a = {}'.format(Person.a))

# name=wedo2 age=36
# a = 1
# name=wedo age=31
# a = 1

wedo.add()
print('a={}'.format(Person.a), 'wedo 2 a={}'.format(wedo2.a))
# classmethod a id =  1644522560
# a=2 wedo2-a=2

从上可知,类方法可以通过Person类直接调用(当然也可以实例调用),来改变不同实例的共享类属性。在类方法中通过cls来表示类本身,以便访问类本身的属性;当然也可以创建类的实例。

在上面的例子,我们通过类方法create_engineer,实现了新的Person的初始化实例。

engineer = Person.create_engineer('wedo3', 40)
engineer.info()
# name=engineer:wedo3 age=40

那么类方法的作用是什么?总结一下:

  • 类方法可以统一控制类属性,并影响所有实例对象;这在需要对所有实例进行同步控制的时候特别有用
  • 类方法,可以向工厂方法一样,重新定义类的实例化;这可以在处理不同初始化的的情况使用

希望以上,对你有帮助。

目录
相关文章
|
24天前
|
调度 Python
微电网两阶段鲁棒优化经济调度方法(Python代码实现)
微电网两阶段鲁棒优化经济调度方法(Python代码实现)
|
1月前
|
Python
Python字符串center()方法详解 - 实现字符串居中对齐的完整指南
Python的`center()`方法用于将字符串居中,并通过指定宽度和填充字符美化输出格式,常用于文本对齐、标题及表格设计。
|
2月前
|
安全 Python
Python语言中常用的文件操作方法探讨
通过上述方法的结合使用,我们可以构筑出强大并且可靠的文件操作逻辑,切实解决日常编程中遇到的文件处理问题。
157 72
|
23天前
|
机器学习/深度学习 数据采集 算法
【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
|
5月前
|
机器学习/深度学习 数据可视化 算法
Python数值方法在工程和科学问题解决中的应用
本文探讨了Python数值方法在工程和科学领域的广泛应用。首先介绍了数值计算的基本概念及Python的优势,如易学易用、丰富的库支持和跨平台性。接着分析了Python在有限元分析、信号处理、优化问题求解和控制系统设计等工程问题中的应用,以及在数据分析、机器学习、模拟建模和深度学习等科学问题中的实践。通过具体案例,展示了Python解决实际问题的能力,最后总结展望了Python在未来工程和科学研究中的发展潜力。
105 0
|
3月前
|
存储 机器学习/深度学习 人工智能
稀疏矩阵存储模型比较与在Python中的实现方法探讨
本文探讨了稀疏矩阵的压缩存储模型及其在Python中的实现方法,涵盖COO、CSR、CSC等常见格式。通过`scipy.sparse`等工具,分析了稀疏矩阵在高效运算中的应用,如矩阵乘法和图结构分析。文章还结合实际场景(推荐系统、自然语言处理等),提供了优化建议及性能评估,并展望了稀疏计算与AI硬件协同的未来趋势。掌握稀疏矩阵技术,可显著提升大规模数据处理效率,为工程实践带来重要价值。
154 58
|
2月前
|
数据管理 开发工具 索引
在Python中借助Everything工具实现高效文件搜索的方法
使用上述方法,你就能在Python中利用Everything的强大搜索能力实现快速的文件搜索,这对于需要在大量文件中进行快速查找的场景尤其有用。此外,利用Python脚本可以灵活地将这一功能集成到更复杂的应用程序中,增强了自动化处理和数据管理的能力。
146 0
|
4月前
|
Python
Python技术解析:了解数字类型及数据类型转换的方法。
在Python的世界里,数字并不只是简单的数学符号,他们更多的是一种生动有趣的语言,用来表达我们的思维和创意。希望你从这个小小的讲解中学到了有趣的内容,用Python的魔法揭示数字的奥秘。
112 26
|
4月前
|
Python
在VScode环境下配置Python环境的方法
经过上述步骤,你的VSCode环境就已经配置好了。请尽情享受这扇你为自己开启的知识之窗。如同你在冒险世界中前行,你的探索之路只有越走越广,你获得的知识只会越来越丰富,你的能力只会越来越强。
397 37
|
3月前
|
JSON 数据格式 Python
解决Python requests库POST请求参数顺序问题的方法。
总之,想要在Python的requests库里保持POST参数顺序,你要像捋顺头发一样捋顺它们,在向服务器炫耀你那有条不紊的数据前。抓紧手中的 `OrderedDict`与 `json`这两把钥匙,就能向服务端展示你的请求参数就像经过高端配置的快递包裹,里面的商品摆放井井有条,任何时候开箱都是一种享受。
87 10

热门文章

最新文章

推荐镜像

更多