当前位置:Gxlcms > Python > Python中的classmethod和staticmethod有什么具体用途?

Python中的classmethod和staticmethod有什么具体用途?

时间:2021-07-01 10:21:17 帮助过:6人阅读

回复内容:

普通方法,静态方法和类方法

这个答案的原文是Difference between @staticmethod and @classmethod in Python
这里的内容是我通知原作者并得到允许的情况下的翻译稿
这个是我的博客文章的地址pyhton静态方法和类方法
类中最常用的方法是实例方法, 即通过通过实例作为第一个参数的方法。
举个例子,一个基本的实例方法就向下面这个:

 
class Kls(object):
    def __init__(self, data):
        self.data = data
    def printd(self):
        print(self.data)
ik1 = Kls('arun')
ik2 = Kls('seema')
ik1.printd()
ik2.printd()
看了很多解释,感觉还是这个比较清楚
oop - Python @classmethod and @staticmethod for beginner?

@classmethod means: when this method is called, we pass the class as the first argument instead of the instance of that class (as we normally do with methods). This means you can use the class and its properties inside that method rather than a particular instance.

@staticmethod means: when this method is called, we don't pass an instance of the class to it (as we normally do with methods). This means you can put a function inside a class but you can't access the instance of that class (this is useful when your method does not use the instance).

投票最高的回答比较基础,稍微进阶一点的看下下面的stackoverflow上的回答,回答top1与top2
oop - Python @classmethod and @staticmethod for beginner? 类和实例都是对象.

所以它们可以有方法.

类的方法就叫类方法.
实例的方法就叫实例方法.
至于静态方法就是写在类里的方法,必须用类来调用(极少数情况下使用,一般都在全局里直接写函数了) @李保银 老师写得已经极好了,谢邀,但我不搞狗尾续貂的事了。 前面的回答已经很详细的解释了classmethod和staticmethod的用法,这里就不再赘述。补充下使用场景。

学过OOP,用过Java,C++的对staticmethod应该比较熟悉,就是静态方法。

静态方法和在普通的非class的method作用是一样的,只不过是命名空间是在类里面。一般使用场景就是和类相关的操作,但是又不会依赖和改变类、实例的状态。
一个比较极端的例子:

class Utility(object):

    @staticmethod
    def list_all_files_in_dir(dir_path):
        ...
 
我不制造答案,我只是答案的搬运工~~~
1、先看:
Python 中的 classmethod 和 staticmethod 有什么具体用途? - 李保银的回答
讲明白了:@classmethod和@staticmethod是什么。
2、再看:
oop - Python @classmethod and @staticmethod for beginner?
讲明白了:什么时候用、怎么用。
3、继续:
oop - Python @classmethod and @staticmethod for beginner?
这个答案是对2的补充。
讲明白了:为什么要这么用。 python 实例方法,静态方法,类方法
from random import choice
COLORS = ['Brown','Black','Golden']

class Animal(object):

    def __init__(self,color):
        self.color = color

    @classmethod
    def make_baby(cls):
        color = choice(COLORS)
        print cls
        return cls(color)

    @staticmethod
    def speak():
        print 'Rora'

class Dog(Animal):

    @staticmethod
    def speak():
        print "Bark!"

    @classmethod
    def make_baby(cls):
        print "making dog baby!"
        print cls
        return super(Dog,cls).make_baby()

class Cat(Animal):
    pass

d = Dog('Brown')
print d.color
pup = d.make_baby()
pup
print pup.color


注意 static method 和 class method 在继承中的区别

人气教程排行