Python 中的 classmethod 和 staticmethod 有什么具体用途?
回复内容:
普通方法,静态方法和类方法这个答案的原文是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).
投票最高的回答比较基础,稍微进阶一点的看下下面的*上的回答,回答top1与top2oop - 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核实处理。
相关文章
相关视频
专题推荐
-
独孤九贱-php全栈开发教程
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
-
玉女心经-web前端开发教程
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
-
天龙八部-实战开发教程
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
推荐阅读
-
Python中staticmethod和classmethod的作用与区别
-
基于python中staticmethod和classmethod的区别(详解)
-
Python中staticmethod和classmethod的作用与区别
-
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
-
基于python中staticmethod和classmethod的区别(详解)
-
Python 中的 classmethod 和 staticmethod 有什么具体用途?
-
为什么话题「X 编程语言有什么奇技淫巧」中关注度最高的前三位问题分别是 C、Python 和 Javascript?
-
Python 中的 classmethod 和 staticmethod 有什么具体用途?
-
为什么话题「X 编程语言有什么奇技淫巧」中关注度最高的前三位问题分别是 C、Python 和 Javascript?
-
基于python中staticmethod和classmethod的区别
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论