Python self 参数即使不使用也需要?
Python self parameter required even when not using it?
我能理解 Python 要求 self 是第一个参数,什么不是。然而,PyCharm 告诉我方法 "hello" 需要 self 作为第一个参数,但它甚至没有被使用,这让我很困惑。
举个例子:
class Example:
def hello():
return "hello world"
这会给我一个错误 "method must have a first parameter, usually called self"
即使 function/method 未使用它,我是否仍应将 self 作为参数包括在内,还是应该忽略此 error/warning?这是因为该方法在 class 中吗?
方法有多种,默认的是实例方法,即使不用也必须有一个self
,但是如果不用self
,最好将其定义为静态方法或 class 方法
class Example:
@staticmethod
def statichello():
return "hello world"
@classmethod
def classhello(cls):
return "hello world from " + str(cls)
def hello(self):
return "hello world from " + str(self)
Class 静态方法可以在有或没有实例的情况下调用:
>>> Example.statichello()
'hello world'
>>> Example().statichello()
'hello world'
>>> Example.classhello()
"hello world from <class '__main__.Example'>"
>>> Example().classhello()
"hello world from <class '__main__.Example'>"
但是必须从实例调用实例方法:
>>> Example().hello()
'hello world from <__main__.Example object at 0x000002151AF10508>'
'self'关键字在方法名中是必须的,如果你使用函数则不需要传递'self'关键字作为参数。
class Example:
def hello():
return "hello world"
这里的 hello() 不是一个函数,它是 class 例子的一个方法,如果你熟悉 java ,那么简而言之你可以说 'self' 关键字就像 java 中的 'this' 关键字。
当您调用 class 的任何方法时,该对象将分配给 'self' 关键字。所以你可以说 'self' 用于指示调用对象。
所以你的代码必须如下所示,
class Example:
def hello(self):
return "hello world"
我能理解 Python 要求 self 是第一个参数,什么不是。然而,PyCharm 告诉我方法 "hello" 需要 self 作为第一个参数,但它甚至没有被使用,这让我很困惑。
举个例子:
class Example:
def hello():
return "hello world"
这会给我一个错误 "method must have a first parameter, usually called self"
即使 function/method 未使用它,我是否仍应将 self 作为参数包括在内,还是应该忽略此 error/warning?这是因为该方法在 class 中吗?
方法有多种,默认的是实例方法,即使不用也必须有一个self
,但是如果不用self
,最好将其定义为静态方法或 class 方法
class Example:
@staticmethod
def statichello():
return "hello world"
@classmethod
def classhello(cls):
return "hello world from " + str(cls)
def hello(self):
return "hello world from " + str(self)
Class 静态方法可以在有或没有实例的情况下调用:
>>> Example.statichello()
'hello world'
>>> Example().statichello()
'hello world'
>>> Example.classhello()
"hello world from <class '__main__.Example'>"
>>> Example().classhello()
"hello world from <class '__main__.Example'>"
但是必须从实例调用实例方法:
>>> Example().hello()
'hello world from <__main__.Example object at 0x000002151AF10508>'
'self'关键字在方法名中是必须的,如果你使用函数则不需要传递'self'关键字作为参数。
class Example:
def hello():
return "hello world"
这里的 hello() 不是一个函数,它是 class 例子的一个方法,如果你熟悉 java ,那么简而言之你可以说 'self' 关键字就像 java 中的 'this' 关键字。 当您调用 class 的任何方法时,该对象将分配给 'self' 关键字。所以你可以说 'self' 用于指示调用对象。 所以你的代码必须如下所示,
class Example:
def hello(self):
return "hello world"