在 class 中调用实例方法 Python 中的方法
Call instance method in class method in Python
我正在为公共图书馆设计一个class。
此 class 方法按如下顺序调用。
调用顺序为 'class method' -> 'instance method' -> 'instance method'
我不知道为什么最后一个实例方法需要 self 参数..
我们知道,通常情况下,实例方法不需要 self 方法。
我错过了什么?
class A:
@classmethod
def first(cls):
print('cls method')
cls.second(cls)
def second(self):
print('inst method 1')
self.third(self) # Question! Why this method need [self] parameter?
def third(self):
print('inst method 2')
A.first()
这是因为你的调用方式 second
。
假设你有这样一个class:
class A:
def do_thing(self):
pass
以下是等价的:
a = A()
a.do_thing()
A.do_thing(a)
换句话说,当我们调用一个实例的方法时,相当于查找class对象的一个函数属性,然后以该实例为第一个调用它参数.
现在,请注意,当您调用 second
时,您将 cls
传递给它。那是 class 对象 而不是实例,这意味着您正在做类似 A.do_thing
的事情。因此,要让它知道你想在哪个实例上调用 third
,你需要传入 self
.
您唯一遗漏的是您没有为您的 class 创建实例。
试试这个-
class A:
@classmethod
def first(cls):
print('cls method')
cls.second(cls)
def second(self):
print('inst method 1')
self.third(self)
def third(self):
print('inst method 2')
instance = A()
instance.first()
这应该会为您提供所需的输出。至于为什么最后一个方法需要 self 作为参数,self 指的是你正在应用该方法的实例,因此你可以用它来改变它的属性。举个例子-
class Kid():
def __init__(self, name, age):
self.name = name
self.age = age
def change_age(self, age):
self.age = age
tom = Kid('Tom', 13)
print(tom.age) #prints 13
tom.change_age(14)
print(tom.age) #prints 14
在这里,通过方法中的 self
参数,Python 会知道哪些实例的 属性 age
必须更改。
在您的用例中,它似乎没有多大意义。我希望这有帮助。 :)
我正在为公共图书馆设计一个class。
此 class 方法按如下顺序调用。
调用顺序为 'class method' -> 'instance method' -> 'instance method'
我不知道为什么最后一个实例方法需要 self 参数..
我们知道,通常情况下,实例方法不需要 self 方法。
我错过了什么?
class A:
@classmethod
def first(cls):
print('cls method')
cls.second(cls)
def second(self):
print('inst method 1')
self.third(self) # Question! Why this method need [self] parameter?
def third(self):
print('inst method 2')
A.first()
这是因为你的调用方式 second
。
假设你有这样一个class:
class A:
def do_thing(self):
pass
以下是等价的:
a = A()
a.do_thing()
A.do_thing(a)
换句话说,当我们调用一个实例的方法时,相当于查找class对象的一个函数属性,然后以该实例为第一个调用它参数.
现在,请注意,当您调用 second
时,您将 cls
传递给它。那是 class 对象 而不是实例,这意味着您正在做类似 A.do_thing
的事情。因此,要让它知道你想在哪个实例上调用 third
,你需要传入 self
.
您唯一遗漏的是您没有为您的 class 创建实例。
试试这个-
class A:
@classmethod
def first(cls):
print('cls method')
cls.second(cls)
def second(self):
print('inst method 1')
self.third(self)
def third(self):
print('inst method 2')
instance = A()
instance.first()
这应该会为您提供所需的输出。至于为什么最后一个方法需要 self 作为参数,self 指的是你正在应用该方法的实例,因此你可以用它来改变它的属性。举个例子-
class Kid():
def __init__(self, name, age):
self.name = name
self.age = age
def change_age(self, age):
self.age = age
tom = Kid('Tom', 13)
print(tom.age) #prints 13
tom.change_age(14)
print(tom.age) #prints 14
在这里,通过方法中的 self
参数,Python 会知道哪些实例的 属性 age
必须更改。
在您的用例中,它似乎没有多大意义。我希望这有帮助。 :)