Python 官方文档:入门教程 => 点击学习
通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量的,一个不
通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量的,一个不能访问实例变量和类变量的方法,其实相当于跟类本身已经没什么关系了,它与类唯一的关联就是需要通过类名来调用这个方法
举个例子:
class Dog(object):
def __init__(self, name):
self.name = name
def eat(self,food): #吃东西
print("%s is eating %s" % (self.name,food))
d = Dog("二哈")
d.eat('包子')
执行输出:
二哈 is eating 包子
将eat方法变成静态方法:
class Dog(object):
def __init__(self, name):
self.name = name
@staticmethod # 把eat方法变为静态方法
def eat(self,food): #吃东西
print("%s is eating %s" % (self.name,food))
d = Dog("二哈")
d.eat('包子')
执行报错:
TypeError: eat() missing 1 required positional argument: 'food'
意思是eat()方法缺少1个位置参数:'food'
怎么会少呢?明明传了啊!
为了方便排错,去掉food参数
class Dog(object):
def __init__(self, name):
self.name = name
@staticmethod # 把eat方法变为静态方法
def eat(self): #吃东西
print("%s is eating" % (self.name))
d = Dog("二哈")
d.eat()
执行报错:
TypeError: eat() missing 1 required positional argument: 'self'
意思是少了一个位置参数self
在类方法调用的时候,self会被自动传进去,不需要手动传。但现在很显然是没有传,因为它提示少了。
注意,这就是静态方法的作用。
静态方法实际上跟类没有关系了,相当于把类的关联截断的。它的作用,只是一个单纯的函数。
它和类唯一的关系就是,它必须通过类调用才行。就相当于它是类的下一级,在名义上来讲,它是类的一部分。
把self去掉
class Dog(object):
def __init__(self, name):
self.name = name
@staticmethod # 把eat方法变为静态方法
def eat(): #吃东西
print("%s is eating" % ('二哈'))
d = Dog("二哈")
d.eat()
执行输出:
二哈 is eating
如果一定要self呢?需要把d给传进去
class Dog(object):
def __init__(self, name):
self.name = name
@staticmethod # 把eat方法变为静态方法
def eat(self): #吃东西
print("%s is eating" % (self.name))
d = Dog("二哈")
d.eat(d)
执行输出:
二哈 is eating
但是这样做,把它变成静态方法,就没有意义了
静态方法,相当于一个工具包,它和其他类没有任何关联。当需要它的之后,调取一下,就可以了
相当于os.system()和os.mkdir()
在特殊场景可能会用到,大多数情况下,用不到。但是你要知道静态方法,面试必考。
静态方法不一定放到类的最下面,它可以放到任意位置。
总结:
静态方法只是名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性。
--结束END--
本文标题: python 面向对象之静态方法
本文链接: https://lsjlt.com/news/179035.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0