> 백엔드 개발 > 파이썬 튜토리얼 > Python 中的 classmethod 和 staticmethod 有什么具体用途?

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-06-06 16:22:01
원래의
1378명이 탐색했습니다.

回复内容:

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

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

 
<span class="k">class</span> <span class="nc">Kls</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">data</span>
    <span class="k">def</span> <span class="nf">printd</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="k">print</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>
<span class="n">ik1</span> <span class="o">=</span> <span class="n">Kls</span><span class="p">(</span><span class="s">'arun'</span><span class="p">)</span>
<span class="n">ik2</span> <span class="o">=</span> <span class="n">Kls</span><span class="p">(</span><span class="s">'seema'</span><span class="p">)</span>
<span class="n">ik1</span><span class="o">.</span><span class="n">printd</span><span class="p">()</span>
<span class="n">ik2</span><span class="o">.</span><span class="n">printd</span><span class="p">()</span>
로그인 후 복사
看了很多解释,感觉还是这个比较清楚
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 在继承中的区别
로그인 후 복사
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿