python中的class_static的@classmethod的巧妙用法
作者:peterpan--1998 发布时间:2022-07-18 15:54:43
标签:python,classmethod,class,static
python中的class_static的@classmethod的使用 classmethod的使用,主要针对的是类而不是对象,在定义类的时候往往会定义一些静态的私有属性,但是在使用类的时候可能会对类的私有属性进行修改,但是在没有使用class method之前对于类的属性的修改只能通过对象来进行修改,这是就会出现一个问题当有很多对象都使用这个属性的时候我们要一个一个去修改对象吗?答案是不会出现这么无脑的程序,这就产生classmethod的妙用。请看下面的代码:
class Goods:
__discount = 0.8
def __init__(self,name,money):
self.__name = name
self.__money = money
@property
def price(self):
return self.__money*Goods.__discount
@classmethod
def change(cls,new_discount):#注意这里不在是self了,而是cls进行替换
cls.__discount = new_discount
apple = Goods('苹果',5)
print(apple.price)
Goods.change(0.5) #这里就不是使用apple.change()进行修改了
print(apple.price)
上面只是简单的列举了class method的一种使用场景,后续如果有新的会持续更新本篇文章 2.既然@staticmethod和@classmethod都可以直接类名.方法名()来调用,那他们有什么区别呢
从它们的使用上来看,
@staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。
@classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。
如果在@staticmethod中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名。
而@classmethod因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码。
下面上代码。
class A(object):
bar = 1
def foo(self):
print 'foo'
@staticmethod
def static_foo():
print 'static_foo'
print A.bar
@classmethod
def class_foo(cls):
print 'class_foo'
print cls.bar
cls().foo()
###执行
A.static_foo()
A.class_foo()
知识点扩展:python classmethod用法
需求:添加类对象属性,在新建具体对象时使用该变量
class A():
def __init__(self,name):
self.name = name
self.config = {'batch_size':A.bs}
@classmethod
def set_bs(cls,bs):
cls.bs = bs
def print_config(self):
print (self.config)
A.set_bs(4)
a = A('test')
a.print_config()
来源:https://blog.csdn.net/qq_42617984/article/details/117914377


猜你喜欢
- 这个函数用于储存图片,将数组保存为图像此功能仅在安装了Python Imaging Library(PIL)时可用。版本也比较老了,新的替代
- PDOStatement::setAttributePDOStatement::setAttribute — 设置一个语句属性(PHP 5
- 1、grid 布局说明:参数说明: sticky:在插件正常尺寸下,分配单元中多余的空间(如果没有声明属性,默认插
- 1.复制表结构及数据到新表CREATE TABLE 新表SELECT * FROM 旧表 2.只复制表结构到新表CREATE TABLE 新
- 本文向大家介绍一个javascript实现的动画。点击开始按钮div会往右移动,点击停止后,div停止移动,再点击则继续移动。请看下面代码:
- 列表是什么?列表由一系列特定顺序排列的元素组成,你可以创建包含字母表中的所有字母、数字0~9、所有家庭成员姓名的列表等等,也可以将任何东西放
- 1. 镜像源列表清华:https://pypi.tuna.tsinghua.edu.cn/simple阿里云:http://mirrors.
- 字符串函数ASCII(str) 返回字符串str的第一个字符的ASCII值(str是空串时返回0) my
- <% dim result,result1 str="ad_asp之家_nzlkjlkfjoj
- 在编写程序时,数据库结构会经常变化,所以经常需要编写一些数据库脚本,编写完成后需发往现场执行,如果已经存在或者重复执行,有些脚本会报错,所以
- 引言使用 python 绘制网络训练过程中的的 loss 曲线以及准确率变化曲线,这里的主要思想就时先把想要的损失值以及准确率值保存下来,保
- 1.Django实现WebSocket在线聊天室1.1 安装pip install channels==2.3(saas) F:\Deskt
- python中的print()函数和java中的System.out.print()函数都有着打印字符串的功能。python中:print(
- 实现效果实现代码import matplotlib.pyplot as pltfrom skimage import iofile_name
- 后来看到博客园在用NorthScale Memcached Server(官方站点:http://www.couchbase.com/pro
- 代码如下所示:$num = 10.4567; //第一种:利用round()对浮点数进行四舍五入 &n
- 前言最近在做文本统计,用 Python 实现,遇到了一个比较有意思的难题——如何保存统计结果。直接写入内存实在是放不下,十几个小时后内存耗尽
- 前言: 在爬虫过程中,我们可能需要重复的爬取同一个网站,为了避免重复的数据存入我们的数据库中 通过实现增量去重 去解决这一问题 本文还针对了
- 很棒的新闻发布系统分享给大家,希望大家喜欢。下面就让我们来说一说基于jsp的新闻发布系统,其中使用的技术有JavaBean、fillter、
- python 读写中文json的实例详解读写中文json想要 读写中文json ,可以使用python中的 json 库可以对j