如果我像这样定义一个类a
和一个方法b
:(在Python2.7中)
class a:
def b():
print("hello")
我不能通过
调用此方法 a.b()
也不:
a_instance = a(); a_instance.b()
我的问题是:
(1)有没有办法打电话给b?
(2)这种用法是否有意义?
(3)我认为b既不是static method
也不是instance method
。 b
是class method
吗?如果没有,应该将什么命名为b
?
答案 0 :(得分:3)
b
是一种静态方法。只需添加@staticmethod
装饰器。
class a:
@staticmethod
def b():
print("hello")
此外,您不应该这样做,但如果您想在不更改课程的情况下致电b()
,则可以a().b.__func__()
。
答案 1 :(得分:3)
或classmethod
装饰器,它将类对象作为第一个实例。
有没有办法打电话给b?
是的,您可以将其设置为静态方法或实例方法,并相应地调用它。下面我将它设为静态方法,以便您可以在任何实例上或直接在类对象a
上调用它
class a:
@classmethod
def b(cls):
print("hello")
a.b() #'hello'
这种用法是否有意义?
用法是什么?静态方法?是的,这取决于你的架构。 classmethods可以用作工厂函数吗?返回新的类实例。
我认为b既不是静态方法也不是实例方法。是一个类方法吗?如果没有,应该将什么命名为b?
我也不认为它也是。我相信它只是一个在类体
中定义的函数我对在类中定义函数并询问类似问题here
感到困惑答案 2 :(得分:0)
以防这一点不明显:
class a:
def b(self): # a normal "instance method" -- note "self"
print("hello")
aa = a() # an instance
aa.b() # call with no parameters
此处b
没有参数,因为在类的实例上调用时会隐含self
。