如何在python中使用没有args的方法?

时间:2013-01-06 15:21:45

标签: python python-2.7

如果我像这样定义一个类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 methodbclass method吗?如果没有,应该将什么命名为b

3 个答案:

答案 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