python @classmethod 类方法与 @staticmethod 静态方法 标准模块 abc 提供的 @abstractmethod 抽象方法

1、静态方法,无需实例化,也可以实例化后再调用

class C(object):
    @staticmethod
    def f():
        print('runoob');
 
C.f();          # 静态方法无需实例化
cobj = C()
cobj.f()        # 也可以实例化后调用

2、classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。

复制代码
#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
class A(object):
    bar = 1
    def func1(self):  
        print ('foo') 
    @classmethod
    def func2(cls):
        print ('func2')
        print (cls.bar)
        cls().func1()   # 调用 foo 方法
 
A.func2()               # 不需要实例化
复制代码

3、抽象方法表示基类的一个方法,没有实现,所以基类不能实例化,子类实现了该抽象方法才能被实例化。
Python的abc提供了@abstractmethod装饰器实现抽象方法

 

复制代码
from abc import abstractmethod, ABCMeta

class Bar(metaclass=ABCMeta):
    @abstractmethod
    def fun(self):
        '''please Implemente in subclass'''


class SubBar(Bar):
    def fun(self):
        print('fun in SubBar')


b = SubBar()
b.fun()
复制代码

 

posted @   Tomorrow1126  阅读(129)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
历史上的今天:
2020-09-19 c++科学计数法 、long long的范围
2020-09-19 最大序列和
2020-09-19 N阶上楼梯问题——动态规划(递推求解)
2020-09-19 动态规划题型总结
2020-09-19 hdu1232畅通工程——并查集
点击右上角即可分享
微信分享提示