假设有一个带有属性和方法的简单类。
class c:
def __init__(self, a, b):
self.a = a
self.b = b
def f(self):
return(self.a + self.b)
plus = c(2, 2)
print(c.f(plus))
print(c(2, 2).f())
如果我打印这个,先创建一个对象,它就可以了。但是当我将属性传递给方法本身时,我得到一个错误。
print(c.f(2, 2))
那么,是否可以像在普通函数中那样在不创建对象的情况下将属性传递给方法本身?我做错了什么,还是在这种情况下我应该使用正常函数而不是方法? 谢谢你们帮助;)
您可以使用staticmethod
:
class c:
def __init__(self, a, b):
self.a = a
self.b = b
@staticmethod
def f(*args):
return sum(args)
print(c.f(2, 2))
输出:
4
如果要避免创建类的实例,可以使用@staticmethod
修饰器:
class C:
@staticmethod
def f(a, b):
return a + b
>>> C.f(2, 2)
4
我还建议遵循 PEP 8 约定并使用 CapWords 来命名类。
把类想象成模具。您实际上并不与模具本身交互,而是使用模具创建对象,然后可以与之交互。为了对对象执行某些操作,必须先创建它。这称为实例化。