【发布时间】:2015-05-29 21:11:51
【问题描述】:
- 我有一个无法触摸的外部库。这个库有一个函数 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对象粘贴在某种包装器中而不是尝试更改其类吗? -
谢谢,实际上我需要将对象传递给库端函数和我的函数,因此该对象在某种意义上应该是 A 的实例。但现在我明白了困难(令我惊讶!),我将采取另一种方法。也许定义具有类 A 实例作为其成员的类 B。当我需要将它传递给库端函数时,调用
a = genA(); B b; b.a_instance =a; lib_fun(b.a_instance)。你觉得有道理吗? -
我不确定它的效果如何,但似乎可行。
标签: python class python-2.7 inheritance function