- 我有一个外部库,无法修改。这个库有一个函数,genA(),用于返回类A的实例。
- 我在自己的代码中定义了类B,作为类A的子类。
- 我想在我的项目中使用类B的实例,但是这个实例应该由genA()生成。
有没有标准且简单的方法来实现这一点呢?
# I cannnot tweak these code
def genA():
a = A
return(a)
class A:
def __init__():
self.a = 1
# ---
# code in my side
class B(A):
def __init__():
self.b = 2
a = genA()
# like a copy-constructor, doesn't work
# b = B(a)
# I want to get this
b.a # => 1
b.b # => 2
这里是等价的C++代码:
#include <iostream>
// library side code
class A {
public:
int a;
// ... many members
A() { a = 1; }
};
void fa(A a) {
std::cout << a.a << std::endl;
}
A genA() { A a; return a; }
// ///
// my code
class B : public A {
public:
int b;
B() : A() { init(); }
B(A& a) : A(a) { init(); }
void init() { b = 2; }
};
void fb(B b) {
std::cout << b.b << std::endl;
}
int main(void) {
A a = genA();
B b(a);
fa(b); // => 1
fb(b); // => 2
}
A
对象放入某种包装器中,而不是尝试更改它的类吗? - user2357112a = genA(); B b; b.a_instance = a; lib_fun(b.a_instance)
。您认为这有意义吗? - kohske