首页 > 解决方案 > python中自我的解释

问题描述

在 python 的 OOPs 概念中,一个类的实例被用来调用其他方法。我对arjun-sreedharan 的self 有一个很好的解释,self 是如何工作的。

他的解释,

假设您有一个ClassA包含methodA定义为的方法的类:

def methodA(self, arg1, arg2):
    # do something

ObjectA 是此类的一个实例。

现在,当ObjectA.methodA(arg1, arg2)被调用时,python 在内部为您将其转换为:

ClassA.methodA(ObjectA, arg1, arg2)

self变量指的是对象本身。


但就我而言,请考虑上面给出的相同示例。如果methodA在没有类实例的情况下调用。python的内部约定如何?

我的意思是,如果methodA这样调用 --> ClassA().methodA(arg1, arg2)。python 将如何分配self. 因为在我的情况下,我没有声明任何这样的类实例ObjectA = ClassA()

标签: pythonoopself

解决方案


它将在内部创建一个新的 ClassA 实例:

class ClassA:
    def methodA(self):
        return "hey"
    
A = ClassA()
print(A.methodA())
# output : "hey"
print(ClassA.methodA())
# error
print(ClassA().methodA())
# output : "hey"

你会遇到的错误ClassA.methodA()

类型错误:methodA() 缺少 1 个必需的位置参数:'self'

的内部表示ClassA().methodA(arg1, arg2)

ClassA.methodA(temporary_variable, arg1, arg2)

由于temporary_variable我们无法访问,垃圾收集器将在一段时间后删除该对象。
不可达内存是程序占用的块内存,不再有指向它的可达指针。


推荐阅读