我只是不明白为什么我们需要使用@staticmethod.让我们从一个例子开始吧.
class test1:
def __init__(self,value):
self.value=value
@staticmethod
def static_add_one(value):
return value+1
@property
def new_val(self):
self.value=self.static_add_one(self.value)
return self.value
a=test1(3)
print(a.new_val) ## >>> 4
class test2:
def __init__(self,value):
self.value=value
def static_add_one(self,value):
return value+1
@property
def new_val(self):
self.value=self.static_add_one(self.value)
return self.value
b=test2(3)
print(b.new_val) ## >>> 4
Run Code Online (Sandbox Code Playgroud)
在上面的示例static_add_one中,两个类中的方法在计算中不需要类(self)的实例.
该方法static_add_one在类test1是由装饰@staticmethod和正常工作.
但与此同时,static_add_one类test2中没有@staticmethod装饰的方法也可以通过使用self在参数中提供但完全不使用它的技巧来正常工作.
那么使用的好处是@staticmethod什么?它会改善性能吗?或者仅仅是因为python的禅宗指出" 明确比隐含更好 "?
Bre*_*arn 17
使用的原因staticmethod是如果你有一些东西可以写成一个独立的函数(不是任何类的一部分),但你想把它保留在类中,因为它在某种程度上在语义上与类相关.(例如,它可能是一个函数,不需要来自类的任何信息,但其行为特定于类,因此子类可能希望覆盖它.)在许多情况下,它可能同样有意义写一些东西作为独立的函数而不是静态方法.
你的例子并不完全相同.一个关键的区别是,即使你不使用self,你仍然需要一个实例来调用static_add_one---你不能直接在类上调用它test2.static_add_one(1).因此,在那里有一个真正的差异.静态方法最严重的"竞争对手"不是一种忽略的常规方法self,而是一种独立的功能.
Ken*_*n T 12
今天突然发现使用@staticmethod.
如果在类中创建了静态方法,则在使用静态方法之前不需要创建类的实例。
例如,
class File1:
def __init__(self, path):
out=self.parse(path)
def parse(self, path):
..parsing works..
return x
class File2:
def __init__(self, path):
out=self.parse(path)
@staticmethod
def parse(path):
..parsing works..
return x
if __name__=='__main__':
path='abc.txt'
File1.parse(path) #TypeError: unbound method parse() ....
File2.parse(path) #Goal!!!!!!!!!!!!!!!!!!!!
Run Code Online (Sandbox Code Playgroud)
由于方法parse与类File1和有很强的相关性File2,所以把它放在类中更自然。但是,有时这种parse方法在某些情况下也可能用于其他类。如果要使用File1,则必须File1在调用方法之前创建 的实例parse。在类中使用静态File2方法时,您可以直接使用语法调用该方法File2.parse。
这使您的工作更加方便和自然。
| 归档时间: |
|
| 查看次数: |
2487 次 |
| 最近记录: |