classmethod

类方法在Python中使用比较少,类方法传入的第一个参数为cls,是类本身。并且,类方法可以通过类直接调用,或通过实例直接调用。但无论哪种调用方式,最左侧传入的参数一定是类本身。

通常情况下,类方法使用@classmethod装饰器来声明

当这个方法的操作只涉及静态属性的时候 就应该使用@classmethod来装饰这个方法

class Goods(object):__discount = 0.8#自定义商品折扣def __init__(self,name,price):self.name = nameself.__price = price@propertydef price(self):return self.__price*Goods.__discount@classmethoddef set_discount(cls,value):cls.__discount = valueapple = Goods('apple',5)
print(apple.price)
Goods.set_discount(0.5)     #类直接调用
# apple.set_discount(0.1)   #实例直接调用
print(apple.price)

staticmethod

静态方法是指类中无需实例参与即可调用的方法(不需要self参数),在调用过程中,无需将类实例化,直接在类之后使用.号运算符调用方法。

通常情况下,静态方法使用@staticmethod装饰器来声明。

class Test(object):@staticmethoddef message():print('this is a message')Test.message()
t = Test()
t.message()

这里需要注意的是,在Python 2 中,如果一个类的方法不需要self参数,必须声明为静态方法,即加上@staticmethod装饰器,从而不带实例调用它。

而在Python 3中,如果一个类的方法不需要self参数,不再需要声明为静态方法,但是这样的话只能通过类去调用这个方法,如果使用实例调用这个方法会引发异常。

实例方法

实例方法,除静态方法与类方法外,类的其他方法都属于实例方法。

实例方法需要将类实例化后调用,如果使用类直接调用实例方法,需要显式地将实例作为参数传入。

最左侧传入的参数self,是实例本身。

class Test(object):def message(self):print('this is a message')
if __name__ == '__main__':#使用实例调用实例方法t = Test()t.message()#如果使用类直接调用实例方法,需要显示地将实例作为参数传入Test.message(t)

转载于:https://www.cnblogs.com/smallfoot/p/10176606.html

python学习日记(OOP——静态方法和类方法)相关推荐

  1. 菜菜的Python学习日记 | Python类实验代码分享

    系列索引:菜菜的Python学习日记 | Python从入门到入土详解 Python类实验代码分享 编写程序,实现以下功能. (1)创建员工类Employee,属性有姓名name.能力值ability ...

  2. Python学习日记-day1基础篇 字符 输出 注释

    Python学习日记-day1基础篇 字符 输出 注释 by北栀一刺 # -*- coding: utf-8 -*- """ Spyder EditorThis is a ...

  3. python学习日记(第一周)

    python学习日记(第一周) 前言: 无论出于什么目的,学个程序语言吧.之前学过一点点基础语法,然后就搁置了两年,日记仅作为个人记录,有问题还望不吝赐教 其实这玩意儿应该每次学一部分记录一部分的,好 ...

  4. Python学习日记-pandas操作学习

    Python学习日记-pandas模块学习 根据需求筛选数据 绘制柱状图-利用pandas绘制 绘制柱状图-利用matplotlib绘制 绘制柱状图-两组数据比较 绘制柱状图-叠加柱状图 绘制饼状图 ...

  5. 菜菜的Python学习日记 | 正则表达式你必须了解的知识点

    系列索引:菜菜的Python学习日记 | Python从入门到入土详解 文章目录 常用规则 Python对正则表达式的支持 常用规则 符号 解释 示例 说明 . 匹配任意字符 b.t 可以匹配bat ...

  6. python学习日记2-3周

    python学习日记2-3周 怠惰怠惰 improt 导入 import phone.apple.iphone6 import phone.apple.iphone7 import phone.sam ...

  7. Python学习日记——罗马数字转整数

    Python学习日记004--罗马数字转整数 题目来源:LeetCode题库--罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 ...

  8. [Python学习日记] 文件与文件系统(一)

    [Python学习日记] 文件与文件系统(一) 目录 Python3 File(文件) 方法 open() 方法 file 对象 目录 Python3 File(文件) 方法 open() 方法 Py ...

  9. Python学习日记10

    目录 Day.10 1.面向对象进阶 i.装饰器@property ii.__slots__魔法 iii.静态方法和类方法 iv.类之间的关系 2.综合案例练习 3.今日总结 Day.10 2020. ...

  10. Python学习日记:求解由四个数字组成的四位数个数

    看见这个问题时,我们很容易想到我们学习过的排列组合知识点:显然用四个数字组成四位数(这些四位数互不相同)就是一个关于排列的问题:用数学的方法可以知道.那么怎么用Python运行解决呢?这就是本次学习日 ...

最新文章

  1. 国际域名转出ICANN投诉
  2. 【dfs】拔河比赛(ybtoj dfs-1-1)
  3. 8086标志操作指令
  4. [vue] vue中怎么重置data?
  5. 我的bolg,我的收获(MVC首次接触)
  6. 收藏 | 12 种 NumpyPandas 高效技巧
  7. 【JVM】浅谈对OOM的认识
  8. 2022华为杯研赛E题草原放牧策略研究代码+思路
  9. 计算机考试后进先出,事业单位考试计算机基础知识:建立单链表——后进先出表...
  10. 部队计算机专业培训申请书,《计算机专业奖学金申请书》.docx
  11. UE4 VR 模式下全屏解决办法
  12. Kafka的监控以及运维与Kafka-eagle的安装
  13. 自学Java笔记2 2021-3-28更
  14. 2020 dns排名_《2020年全球DNS威胁报告》:DNS攻击平均损失高达92万美元
  15. print out Fibonacci reversely
  16. cmd中回退到上一级文件目录 与 定位下一级目录
  17. 双系统安装deepin20_记录一次Windows+Deepin双系统安装及简单优化
  18. 电脑和打印机怎么连接
  19. 我的第一个Android应用软件——《飞鸟集》
  20. 关于Autodesk软件安装问题

热门文章

  1. AttributeError: ‘torch.return_types.max‘ object has no attribute ‘dim‘
  2. 2021-06-19列表的介绍
  3. 定时任务_SpringTask 定时任务
  4. acm怎么提交java程序_acm提交java
  5. kubernetes kubeadm init this version of kubeadm only supports deploying clusters kubeadm版本降级
  6. postman的参数params如何设置数组和对象参数
  7. java利用opencv降维_PCA主成分分析 特征降维 opencv实现
  8. 使用tp5.1写api接口的流程
  9. eclipse注释模板与代码规范导入例子及配置文件
  10. 二十四、Java集合框架(二)