python函数的行为不同

时间:2019-04-12 09:08:38

标签: python function

使用参数“ self”声明类“ print”的类:

class First:
  def print(self): 
    print('working') 
    return 2

尝试在不实例化类的情况下调用该方法:
First.print()收到以下消息:

TypeError: print() missing 1 required positional argument: 'self'

现在实例化该类并访问该方法时:它正在工作。

first = First()
first.print()

# working
# 2

现在在方法print中定义没有任何参数的同一类:

class First:
  def print():
    print('working')
    return 2

在不实例化类的情况下调用相同的方法,它是可行的:

First.print()

# working
# 2

在没有定义方法参数的情况下,python方法的行为类似于Static。是真的还是其他?

2 个答案:

答案 0 :(得分:0)

self引用绑定的变量或对象。因此需要实例化。如果没有self的方法将变为静态(Python上下文中的类方法),并且可以使用“类名”进行调用。 另外,您还应该在方法定义上方编写@classmethod装饰器。以便明确指出它是classmethod

class First:
  @classmethod
  def print(cls):
    print('working')
    return 2
First.print()

供参考 https://medium.com/quick-code/understanding-self-in-python-a3704319e5f0

答案 1 :(得分:0)

在第一种情况下,它是 one 参数的函数。因此,Class.f()失败。在第二个示例中,它是 zero 参数的函数。因此,Class.f()有用。

创建实例时,第一个参数自动绑定到该实例,并且您需要传递n-1参数。因此,它在您的第一个示例中有效,但在您的第二个示例中无效。