静态方法staticmethod和类方法classmethod

一、类方法classmethod

  • 把一个方法变成一个类中的方法,这个方法可以直接利用类来调用,不需要依托任何的对象,即不需要实例化也可以做一些改变
  • 当这个方法的操作只涉及静态属性的时候,就应该使用classmethod来装饰这个方法
class Goods:
__discount = 0.8 # 静态私有属性
def __init__(self,name,price):
self.name = name
self.__price = price # price 私有化
@property # 将price方法伪装成属性,类外直接调用函数,执行私有属性的一些操作
def price(self): # 不用传参数
return self.__price * Goods.__discount
@classmethod # 把一个方法变成类中的方法,这个方法可以在类外直接被类调用,而不需要依托任何对象,即不用实例化也可以
def change_discount(cls,new_discount): # 修改折扣
cls.__discount = new_discount
apple = Goods('苹果',5) # 实例化
print(apple.price)
Goods.change_discount(0.5) # 这里可以直接用类Goods来调用,不需要依托apple来调用
print(apple.price)

运行结果:

4.0
2.5

二、静态方法staticmetho

  • 在完全面向对象的程序中,如果一个函数既和对象没有关系也和类没有关系,那么就用staticmethod将这个函数变成静态方法
class Login:
def __init__(self,name,password):
self.name = name
self.pwd = password
def login(self): pass
@staticmethod
def get_usr_pwd(): # 这里可以传参数,但是不是特殊的参数,就一些普通的参数
# 原本是和类和对象都无关的函数方法,但是现在是类中的静态方法了
usr = input('用户名: ')
pwd = input('密码: ')
Login(usr,pwd)
Login.get_usr_pwd() # 使用类直接去调用静态方法

三、小结

  • 类方法和静态方法都是用类直接调用的,都可以不进行实例化就可以做相关操作
  • 对象也可以调用类方法和静态方法(指针指向类),但是一般推荐使用类名调用
  • 类方法有一个默认参数cls,代表这个类
  • 静态方法没有默认参数,像函数一样

静态方法staticmethod和类方法classmethod的更多相关文章

  1. Python - 静态方法@staticmethod和类方法classmethod

    传送门 https://github.com/jackfrued/Python-100-Days/blob/master/Day01-15/Day09/%E9%9D%A2%E5%90%91%E5%AF ...

  2. python-静态方法staticmethod、类方法classmethod、属性方法property

    Python的方法主要有3个,即静态方法(staticmethod),类方法(classmethod)和实例方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 def  ...

  3. python中静态方法(@staticmethod)和类方法(@classmethod)的区别

    一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法. 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用. 这有利于组织代码,把某些应 ...

  4. 【面试必问】python实例方法、类方法@classmethod、静态方法@staticmethod和属性方法@property区别

    [面试必问]python实例方法.类方法@classmethod.静态方法@staticmethod和属性方法@property区别 1.#类方法@classmethod,只能访问类变量,不能访问实例 ...

  5. Python的3个方法:静态方法(staticmethod),类方法(classmethod)和实例方法

    Python的方法主要有3个,即静态方法(staticmethod),类方法(classmethod)和实例方法,如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  6. python类方法@classmethod与@staticmethod

    目录 python类方法@classmethod与@staticmethod 一.@classmethod 介绍 语法 举例 二.@staticmethod 介绍 语法 举例 python类方法@cl ...

  7. 类的静态方法@staticmethod

    静态方法 @staticmethod 静态方法是定义在类内部的函数,此函数的作用域是类的内部 说明: 静态方法需要使用 @staticmethod装饰器定义 静态方法与普通函数定义相同,不需要传入se ...

  8. python静态属性@property、类方法@classmethod、静态方法@staticmethod和普通方法

    静态属性:即将类的函数通过@property属性封装,封装后实例调用该函数时,不再需要在函数后面加(),而是用类似调用数据属性的方式直接调用函数名称即可执行函数. 静态属性既可以访问类的属性,也可以访 ...

  9. 特性(property)/静态方法(staticmethod)/类方法(classmethod)/__str__的用法

    property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值 1 import math 2 class Circle: 3 def __init__(self,radius): #圆的 ...

随机推荐

  1. @PathVariable 处理参数为空的情况

    @RequestMapping(value = "/get/{id}/{userId}", method = RequestMethod.GET) public Result ge ...

  2. 怎么解决js中如滑动到最底端一次操作触发多次

    定义一个布尔类型到标志,处理中将起设置为true ,处理完改完false,逻辑: data{ isInProcessing:false } //逻辑函数过程中: if(isInProcessing){ ...

  3. 大型情感剧集Selenium:4_老中医教你(单/多/下拉框)选项定位 #华为云·寻找黑马程序员#

    今天讲什么 讲什么标题说了,讲selenium的单选.多选.下拉框选项定位.但其实这东西,没什么太多说的,又比较枯燥,那该怎么让这一集selenium的课程变得有趣呢?有请老中医,哈哈- 怎么样,这个 ...

  4. 小熊派IoT开发板系列教程正式发布——免费学习

    [摘要] 小熊派开源社区针对小熊派IoT开发板首次规划了小熊派未来的系列教程.从基础到进阶的设计,可适应具有不同基础的开发者,通过该系列教程的学习,开发者能够轻松掌握IoT产品的开发.该系列教程包括单 ...

  5. 188W+程序员关注过的问题:Java到底是值传递还是引用传递?

    在逛 Stack Overflow 的时候,发现了一些访问量像阿尔卑斯山一样高的问题,比如说这个:Java 到底是值传递还是引用传递?访问量足足有 188万+,这不得了啊!说明有很多很多的程序员被这个 ...

  6. 17.JAVA-Dom、Sax解析XML详解

    在JAVA中,解析有三种方式: Dom解析(支持改删,耗内存). Sax解析(不支持改删,不耗内存). Pull解析(在Android中推荐使用的一种解析XML的方式,在下章学习). 1.支持Dom与 ...

  7. luogu P2812 校园网络【[USACO]Network of Schools加强版】|Tarjan

    题目背景 浙江省的几所OI强校的神犇发明了一种人工智能,可以AC任何题目,所以他们决定建立一个网络来共享这个软件.但是由于他们脑力劳动过多导致全身无力身体被♂掏♂空,他们来找你帮助他们. 题目描述 共 ...

  8. 记一次Elasticsearch OOM的优化过程——基于segments force merge 和 store type 转为 niofs

    首选,说明笔者的机器环境(不结合环境谈解决方案都是耍流氓): cpu 32核,内存128G,非固态硬盘: RAID0 (4T * 6),单节点,数据量在700G到1800G,索引15亿~21亿.敖丙大 ...

  9. Undefined symbols for architecture x86_64"_OBJC_CLASS_$_QQApiInterface 怎么搞

    今天上午报了一个这样的错误 解决办法 如此如此 ~~ 然后编译 看看报的什么错误 还是不行的话就重新导入三方库 添加依赖库 结果build success

  10. Orleans 配置端口的一些坑

    Orleans的配置有点乱的 整理了下 .Configure<EndpointOptions>(options => { //这里的IP决定了是本机 还是内网 还是公网 option ...