我工作的Python 2.7和我试图超载 __getitem__,并__setitem__从继承的类list.
假设我有这个课程:
class A(list):
def __getitem__(self, key):
print "GET!"
def __setitem__(self, key, value):
print "SET!"
Run Code Online (Sandbox Code Playgroud)
用方括号A或A.__getitem__应调用.通常情况就是这样,但是当我使用A.__setitem__父实现时,会调用它.为什么?为什么[:]工作?
a = A([1])
a[1] # prints GET!
a["1"] # prints GET!
a[::] # prints GET!
a[slice(None)] # prints GET!
a[:] # returns the list [1]
Run Code Online (Sandbox Code Playgroud)
和以下一样[::]:
a[1] = 2 # prints SET!
a[::] = 2 # prints SET!
a[slice(None)] = 2 # prints SET!
a[:] = [2] …Run Code Online (Sandbox Code Playgroud) 我正在努力与类继承建设秩序.假设我有这两个类:
class A {
public:
const int CONSTANT_A;
A(const int constant) : CONSTANT_A(constant) {
}
void write() {
std::cout << CONSTANT_A;
}
};
class B : public A {
public:
const int CONSTANT_B = 3;
B() :A(CONSTANT_B) {
write();
}
};
Run Code Online (Sandbox Code Playgroud)
B创建新对象时,CONSTANT_A不是3,因为类继承构造函数的顺序如下:
有没有办法强制成员常量首先初始化?这是最干净的方法吗?