python - 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()
。
解决方案
它将在内部创建一个新的 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
我们无法访问,垃圾收集器将在一段时间后删除该对象。
不可达内存是程序占用的块内存,不再有指向它的可达指针。
推荐阅读
- python - 初学者“艰难地学习 Python 3”前 5 和 6. Chromebook w/ Linux beta vs repl.it
- ruby-on-rails - Rails API - 获取未经许可的参数上传文件
- python - 尝试为 .gg 网站运行 scrapy shell 命令,但返回一个空括号
- javascript - 带有 JavaScript 和 Vue 的 Bootstrap 4 模态:$ 未在 eval 中定义
- unity3d - 双跳有时会变成三级跳
- ios - AudioKit 5 iOS 当前播放时间
- jquery - 将数字字符串中的第一个数字限制为 2 到 9
- python - 求解正整数系数的线性向量加法
- python-3.x - pandas.Series.append() 将新值添加为额外列,而不是将其附加到系列的末尾
- python - 如何制作切换按钮