使用 @classmethod 和 @staticmathod 后,类的方法的调用

  • 一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。
  • 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。
    这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。

@staticmethod 和 @classmethod 都可以直接类名.方法名()来调用,他们的区别

  • @staticmethod 不需要表示自身对象的 self 和自身类的 cls 参数,就跟使用函数一样。
  • @classmethod 也不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数。
  • 如果在 @staticmethod 中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名。
  • 而 @classmethod 因为持有 cls 参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码。

总结:
简单使用的时候使用@staticmethod, 需要调用类的其他属性时使用@classmethod

示例

# -*- coding: utf-8 -*-class Washer:company = "Li"def __init__(self,water=10,scour=2):self._water = waterself.scour = scourself.year = 2010@staticmethoddef spins_ml(spins):# print("company:",Washer.company)# print('year:',self.year)return spins * 0.4@classmethoddef get_washer(cls,water,scour):print("company:",Washer.company)print('year:',self.year)return cls(water,cls.spins_ml(scour))@propertydef water(self):return self._water@water.setterdef water(self,water):if 0 < water <=500:self._water = waterelse:print("set Failure!")@propertydef total_year(self):return 2015 - self.yeardef set_water(self,water):self.water = waterdef set_scour(self,scour):self.scour = scourdef add_water(self):print('Add water:',self.water)def add_scour(self):print('Add scour:',self.scour)def start_wash(self):self.add_water()self.add_scour()print('Start wash...')

参考资料:http://blog.willdx.me/web/面向对象进阶.html

转载于:https://www.cnblogs.com/ronky/p/9884155.html

内置装饰器一:@classmethod、@staticmathod相关推荐

  1. python的内置装饰器

    Python中总共包括三个内置装饰器: 1.staticmethod   (静态方法使用) 2. classmethod     (类方法) 3.property             (把类的方法 ...

  2. Python笔记-内置装饰器

    内置装饰器是指python中自己带的,不要程序员写的 如下代码: class Student(object):def __init__(self, name, score):self.name = n ...

  3. 32.Python面向对象(五)【描述符、运算符底层、装饰器:闭包-闭包参数-内置装饰器-类装饰器】

    目录: 每篇前言: Python面向对象(五) 1.1 描述符 1.2 运算符底层调用的什么? 1.3 装饰器 第一部分--引入门 (1)首先.咱再看遍闭包是啥: (2)然后,咱稍微高级点,看看闭包参 ...

  4. 内置装饰器wraps的用法

    装饰器的作用:再不改变原有功能代码的基础上,为其添加额外的功能.python wraps(内置装饰器)的用法: @wraps(func)的作用:不改变使用装饰器的原有函数func的结构.(比如入参格式 ...

  5. python内置装饰器property_python之内置装饰器(property/staticmethod/classmethod)

    python内置了property.staticmethod.classmethod三个装饰器,有时候我们也会用到,这里简单说明下 1.property 作用:顾名思义把函数装饰成属性 一般我们调用类 ...

  6. python 三个内置装饰器,python中自带的三个装饰器

    说到装饰器,就不得不说python自带的三个装饰器: 1.@property 将某函数,做为属性使用 @property 修饰,就是将方法,变成一个属性来使用. class A(): @propert ...

  7. python类内置装饰器(一分钟读懂)

    property装饰器,用来将一个get方法,转换为对象的属性 添加为property装饰器以后,我们就可以像调用属性一样使用get方法 使用property装饰的方法,必须和属性名是一样的 sett ...

  8. python内置装饰器property_Python中的内置装饰器之property

    装饰器是Python中很重要的一个概念,但是这篇文档不介绍装饰器的实现,我们只需要知道装饰器可以实现一些功能: Python中也包含一些自带的装饰器,这次就说一下属性装饰器property 相关知识点 ...

  9. Struts2内置拦截器和自定义拦截器

    内置拦截器 Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特性.这些内置的拦截器在struts-default.xml中配置.只有配置了拦截器,拦截器才可以正常 ...

最新文章

  1. 抽象工厂模式 objective-c 版
  2. Ajax基本案例详解之$.ajax的实现
  3. 安装linux的准备
  4. vue devtools 插件安装
  5. GitHub中watch star fork三个按钮干什么用的?
  6. ORA-28056:Writing audit records to Windows EventLog failed的问题
  7. Android自定义view之基础知识
  8. 在 ML2 中配置 Vlan Network- 每天5分钟玩转 OpenStack(93)
  9. bypass最新版d盾mysql_Bypass D盾_IIS防火墙SQL注入防御(多姿势)
  10. 8个前端技术学习网站
  11. c语言标准体重测试指数分男女,测测你的体脂率附男女标准体脂率对照表
  12. 动圈耳机振膜_耳机必看!谈动圈式耳机振膜技术
  13. 迭代法求解递推方程,
  14. 光线追踪(RayTracing)算法
  15. 微信小程序 textarea读取到的文本换行问题 以及保存回车换行到后台
  16. 温控中使用PID控制算法
  17. Win10 系统安装
  18. java中 never closed_【Spring】在Java使用Spring时的Resource leak: 'applicationContext' is never closed警告...
  19. python 数据分类汇总_Python 实现批量分类汇总并保存xlsx文件
  20. 关于使用echarts堆叠柱状图百分比显示的问题

热门文章

  1. 源文件的编码会对编译结果有影响
  2. 有勇气的牛排---算法与数据
  3. PhpStorm 中文设置教程
  4. Maplesoft MapleSim2020中文版
  5. ARM 内核移植中常见的错误
  6. scrapy实现post请求与请求传参
  7. MySQL Server 5.0 和 6.0 安装指南[转]
  8. Shinning - 我所听过最棒的演讲
  9. 云数据管理公“云信达”获东方富海数千万A轮投资
  10. 初识前端——个人总结