小编Sek*_*mer的帖子

Python 中的钻石继承

关于python中菱形继承的问题:

  A
/   \
B    C
\   /
  D
Run Code Online (Sandbox Code Playgroud)

我首先创建了这个

class A:
    def __init__(self):
        print('a')

class B(A):
    def __init__(self):
        print('b')
        A.__init__(self)

class C(A):
    def __init__(self):
        print('c')
        A.__init__(self)

class D(B,C):
    def __init__(self):
        print('d')
        super().__init__()

test = D()
Run Code Online (Sandbox Code Playgroud)

它的输出是 d, b, a

改变B和C之后A.__init__() to super()

class A:
    def __init__(self):
        print('a')

class B(A):
    def __init__(self):
        print('b')
        super().__init__()  # THIS AND ^^

class C(A):
    def __init__(self):
        print('c')
        super().__init__()   # THIS  ^^

class D(B,C):
    def __init__(self):
        print('d')
        super().__init__()

test = D()
Run Code Online (Sandbox Code Playgroud)

输出为 d、b、c、a

有人可以解释为什么该程序会这样运行吗?

python inheritance multiple-inheritance diamond-problem

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

为什么列表函数和列表文字的行为不同?

我试图创建一个包含n 个空列表的列表,但遇到了一个有趣的情况。

首先我尝试了以下方法:

>>> n = 3
>>> list([]) * n
[]
Run Code Online (Sandbox Code Playgroud)

它创建一个空列表。

之后,我尝试了以下行,它也创建了一个空列表:

>>> list(list()) * n
[]
Run Code Online (Sandbox Code Playgroud)

但是当我用文字尝试同样的方法时,

>>> [[]] * n 
[[], [], []]
Run Code Online (Sandbox Code Playgroud)

它给出了正确的输出。有人可以解释为什么吗?

python list

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

在C中定义enum的数据类型以用于内存

我找不到这个问题的直接答案,但是是否可以enum在 C 中强制使用某种数据类型?

例如,我有一个enum状态机,它只保存一些状态,因此对于内存和性能问题,将 an 定义enum为字节或更短的数据类型会很好。有没有办法在 C 语言甚至 Arduino IDE 中提供这种行为?

任何帮助表示赞赏

c enums arduino state-machine

3
推荐指数
2
解决办法
5957
查看次数