2

如果我这样定义一个类a和一个方法b:(在 Python2.7 中)

class a:
    def b():
        print("hello")

我也不能调用这个方法

 a.b()

也不:

a_instance = a(); a_instance.b()

我的问题是:

(1)有没有办法调用b?

(2) 有没有这种用法有意义的情况?

(3) 我认为 b 既不是 astatic method也不是 a instance method。是b一个class method?如果不是,应该命名b为什么?

4

3 回答 3

3

b是一种静态方法。只需添加@staticmethod装饰器。

class a:
    @staticmethod
    def b():
        print("hello")

此外,你不应该真的这样做,但如果你想在b()不改变班级的情况下打电话,你可以这样做a().b.__func__()

于 2013-01-06T15:24:34.013 回答
3

classmethod将类对象作为第一个实例的装饰器。

有没有办法调用b?

是的,您可以将其设为静态方法或实例方法并相应地调用它。下面我将其设为静态方法,因此您可以在任何实例上或直接在类对象上调用它a

class a:
    @classmethod
    def b(cls):
        print("hello")

a.b() #'hello'

有没有这种用法有意义的情况?

有什么用途?静态方法?是的,这取决于您的架构。类方法可以用作工厂函数吗?返回类的新实例。

我认为 b 既不是静态方法也不是实例方法。是ba类方法吗?如果不是,应该将什么命名为b?

我也认为不是。我相信它只是在类体内定义的一个函数

我对在类中定义一个函数感到困惑,并在这里问了一个类似的问题

于 2013-01-06T15:25:40.643 回答
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在类的实例上调用时是隐含的。

于 2013-01-06T16:54:47.153 回答