我想我理解 python 中“名称修改”的概念,但我可能错过了一些东西。看看下面的代码:
#!/usr/bin/env python
class Base(object):
__data = "Base"
@classmethod
def func(cls):
return "Class name is {}, data is {}".format(cls.__name__, cls.__data)
class A(Base):
__data = "A"
class B(A):
__data = "B"
print Base.func()
print A.func()
print B.func()
Run Code Online (Sandbox Code Playgroud)
这是我得到的输出:
Class name is Base, data is Base
Class name is A, data is Base
Class name is B, data is Base
Run Code Online (Sandbox Code Playgroud)
现在,我明白对于每个类,类属性的实际名称被修改为_<Class name>__data. 例如,对于 Base 来说是_Base__data,对于 A 来说是_A__data,等等。
我的问题是,在func它内部正确标识了继承类的名称(Base、A 和 B),但cls.__data总是导致 …
在go中的unsafe.SliceData函数的文档中,它说:
SliceData返回指向参数切片的基础数组的指针。
- 如果
cap(slice)> 0,则SliceData返回&slice[:1][0]。
&slice[:1][0]return而不是背后的逻辑是什么&slice[0]?据我所知(并且我的测试证实),两者都会返回相同的地址。Go 开发者选择使用前者而不是后者有什么具体原因吗?