服务器之家

服务器之家 > 正文

python中的class_static的@classmethod的巧妙用法

时间:2021-12-06 10:39     来源/作者:peterpan--1998

python中的class_static的@classmethod的使用 classmethod的使用,主要针对的是类而不是对象,在定义类的时候往往会定义一些静态的私有属性,但是在使用类的时候可能会对类的私有属性进行修改,但是在没有使用class method之前对于类的属性的修改只能通过对象来进行修改,这是就会出现一个问题当有很多对象都使用这个属性的时候我们要一个一个去修改对象吗?答案是不会出现这么无脑的程序,这就产生classmethod的妙用。请看下面的代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码。
下面上代码。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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用法

需求:添加类对象属性,在新建具体对象时使用该变量

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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()

以上就是python中的class_static的@classmethod的使用的详细内容,更多关于python classmethod使用的资料请关注服务器之家其它相关文章!

原文链接:https://blog.csdn.net/qq_42617984/article/details/117914377

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部