classmethod和staticmehod的使用
classmethod和staticmethod都是Python中的修饰器,封装在类中,对类中的函数和子类进行修饰
@staticmethod修饰的方法可以不用传递参数
| |
| class Person(object): |
| def __init__(self, name, age): |
| self.name = name |
| self.age = age |
| |
| @staticmethod |
| def func(): |
| print("我可以写在类中,但是我不能调用此类的方法和属性") |
@staticmethod是静态方法,可以在创建对象的时候向其中传递参数
| class Person(object): |
| def __init__(self, name, age): |
| self.name = name |
| self.age = age |
| |
| @staticmethod |
| def func(): |
| print("我可以写在类中,但是我不能调用此类的方法和属性") |
| |
| @staticmethod |
| def func2(name, age): |
| print('我在实例化的时候就可以传递参数了,但是不能创建对象,即返回值为None') |
| print('姓名:{},年龄:{}'.format(name, age)) |
| |
| def run(self): |
| print('我叫{},今年{}岁了'.format(self.name, self.age)) |
| |
| |
| Tom = Person("Tom", 5) |
| Tom.run() |
| Person.func2("Jack", 4) |
| Tom.func() |
| 我叫Tom,今年5岁了 |
| 我在实例化的时候就可以传递参数了,但是不能创建对象,即返回值为None |
| 姓名:Jack,年龄:4 |
| 我可以写在类中,但是我不能调用此类的方法和属性 |
@classmethod如果传递参数第一个参数必须传递cls,指的是所在类的别城,但是其没有被实例化
| class CatAndMouse(object): |
| num = 123 |
| |
| def __init__(self,name): |
| self.name=name |
| |
| def run(self): |
| print(f'我叫{self.name},猫和老鼠真好看') |
| |
| @classmethod |
| def func1(cls): |
| print('我可以访问CatAndMouse类中的属性',cls.num) |
| print(cls) |
| print('我也可以运行我可以访问CatAndMouse类中的函数') |
| cls('Jack').run() |
| |
| |
| Tom = CatAndMouse("Tom") |
| print(Tom.name) |
| Tom.func1() |
| |
| Tom |
| 我可以访问CatAndMouse类中的属性 123 |
| <class '__main__.CatAndMouse'> |
| 我也可以运行我可以访问CatAndMouse类中的函数 |
| 我叫Jack,猫和老鼠真好看 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构