小编avi*_*iro的帖子

用双下划线继承类属性

我想我理解 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总是导致 …

python inheritance

2
推荐指数
1
解决办法
1209
查看次数

go 中的 slice[:1][0] 与 slice[0]

在go中的unsafe.SliceData函数的文档中,它说:

SliceData返回指向参数切片的基础数组的指针。

  • 如果cap(slice)> 0,则SliceData返回&slice[:1][0]

&slice[:1][0]return而不是背后的逻辑是什么&slice[0]?据我所知(并且我的测试证实),两者都会返回相同的地址。Go 开发者选择使用前者而不是后者有什么具体原因吗?

pointers go slice

1
推荐指数
1
解决办法
71
查看次数

标签 统计

go ×1

inheritance ×1

pointers ×1

python ×1

slice ×1