从Python3的文档super()
"返回一个代理对象,它将方法调用委托给父类或兄弟类的类型." 那是什么意思?
假设我有以下代码:
class SuperClass():
def __init__(self):
print("__init__ from SuperClass.")
print("self object id from SuperClass: " + str(id(self)))
class SubClass(SuperClass):
def __init__(self):
print("__init__ from SubClass.")
print("self object id from SubClass: " + str(id(self)))
super().__init__()
sc = SubClass()
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
__init__ from SubClass. self object id from SubClass: 140690611849200 __init__ from SuperClass. self object id from SuperClass: 140690611849200
这意味着,在该线super().__init__()
,super()
正在返回其然后隐式地传递到父类的当前对象__init__()
的方法.这是准确的还是我错过了什么?
简单来说,我想了解以下内容:
什么时候super().__init__()
跑,
__init__()
怎么样?我们正在调用它,super()
所以无论返回什么,都应该__init__()
从我对Python的理解到目前为止传递给方法.self
进入super().__init__() …
据我了解,当您git add
创建文件时,它只是在将文件添加到存储库之前暂存该文件,但为什么我可以在提交之前看到它已添加到 git 存储库中?
例如,如果我创建一个新的 git 存储库并创建一个名为的新文件foo
并将内容“hello world”添加到其中,然后,我会在该文件夹内的子目录git add foo
中看到一个新项目。我什至可以使用命令查看文件内新文件的内容。objects
.git
objects
git cat-file -p
文件夹中到底添加了什么.git/objects
?从技术上讲,暂存文件有什么作用?git add
比如对文件运行a 后会发生哪些步骤?如果我知道步骤,也许我会更好地理解它。
我对如何从Enumerator
对象中获取值感兴趣.在下面的一段代码中,我期待第一次enum.next
调用引发异常,因为enum
在调用之后已经收到了所有值enum.to_a
.
enum = Enumerator.new do |yielder|
yielder.yield 1
yielder.yield 2
yielder.yield 3
end
p enum.to_a # => [1, 2, 3]
puts enum.next # Expected StopIteration here
puts enum.next
puts enum.next
puts enum.next # => StopIteration exception raised
Run Code Online (Sandbox Code Playgroud)
调用next
与迭代器方法之间的区别to_a
是Enumerator
什么?
我理解为什么应该使用符号而不是哈希中的字符串的一方面。也就是说,内存中只有一个给定 Symbol 的实例,而给定 String 可能有多个具有相同值的实例。
我不明白的是,在哈希查找中,符号如何比字符串快。我看过这里的答案,但我仍然不太明白。
如果:foo.hash == :foo.object_id
返回true
,那么它会有意义,因为这样它就可以使用对象 id 作为哈希值,而不必每次都计算它。然而,情况并非如此,:foo.object_id
也不等于:foo.hash
. 因此我的困惑。
我理解它的用法和用途,Array#inject
但为什么要调用它inject
?我不明白在哪里注入了什么.
ruby ×3
.git-folder ×1
arrays ×1
enumerator ×1
git ×1
git-add ×1
hash ×1
hashmap ×1
inheritance ×1
inject ×1
python ×1
python-3.x ×1
symbols ×1