Я знаю, что в python методы ассоциируются с классом, а не с экземпляром, но они принимают экземпляр в качестве первого аргумента, чтобы получить к нему доступ.но все еще можно определить функцию и связать ее с экземпляром напрямую.Что это значит?и может ли эта функция каким-то образом получить доступ к экземпляру?
class TestClass:
def __init__(self, a):
self.a = a
def method1(self):
return self.a
my_obj = TestClass(12)
print(my_obj.method1()) // 12
Python также позволяет это:
class TestClass:
def __init__(self, a):
self.a = a
my_obj = TestClass(12)
def method1_defined_outside(self):
return self.a
TestClass.method1 = method1_defined_outside
print(my_obj.method1()) // 12
Два приведенных выше фрагмента означают одно и то же.но python также допускает это:
class TestCase:
def __init__(self, a):
self.a = a
my_obj = TestCase(12)
def method1_defined_outside(self):
return self.a
my_obj.method1 = method1_defined_outside
print(my_obj.method1()) // this throws an error stating the method1 is missing one postional argument(s), so clearly self does not automatically equate to the object
Разница между вторым и третьим фрагментом заключается в том, что метод, определенный снаружи, привязан к экземпляру в последнем и к классу в первом.