嗨,我想从继承的子类中获取基类的实例名。你知道吗
例如
class Foo():
def __init__(self, fakeArg):
self.a = fakeArg
class Bar(Foo):
def __init__(self, fakeArg1):
Foo.__init__(self)
self.b = fakeArg1
# say, i store parent(Foo) instance in an variable too
self.c = f
f = Foo('Hello')
b = Bar('Bar')
现在我想附加(关联)“f”到“b”,这样如果我将类Bar实例化为b,它还应该存储父类的哪个实例正在调用派生类实例。你知道吗
一种方法是将父类(Foo)实例“f”解析为类(Bar)的“\uem>init\ustrong>”方法的一个参数。但是,这是一种黑客行为。你知道吗
请提供问题的解决方案。你知道吗
提前谢谢。你知道吗
对你来说,听上去像黑客的是你应该怎么做。你知道吗
请记住,每个类可能都有大量实例,因此它无法自动知道哪个类应该与它“相关”——而使用任何魔法(例如检查父堆栈帧中是否有包含
Foo
实例的变量,并希望这是唯一的一个)都会非常难看,这是一个失败的理由如果我是你的老板,就狠狠地扇你一巴掌。你知道吗因此,您应该将
f
作为参数传递给Bar()
。你知道吗如果您不想要一个单独的
Foo
实例,也就是说,您想要正常的继承,那么不需要创建Foo
的实例,只需在Bar
构造函数中调用Foo.__init__(self, 'Hello')
或super(Bar, self).__init__('Hello')
,并可能接受该值作为参数而不是硬编码它。你知道吗听起来您可能对Python中继承的工作方式感到困惑。在您展示的代码中,
f
和b
没有关系,除非它们是相邻实例化的。你知道吗但是,您的
Bar
实例b
确实可以访问Foo
实例,即它本身。通过声明Bar
是Foo
的一个子类,您的意思是Bar
的每个实例也是Foo
的一个实例。你可以用isinstance(b, Foo)
来测试这个。你知道吗如果需要从} :
bar
的方法访问Foo
中定义的变量或方法,通常可以直接通过传递的self
值访问它。或者,如果要重写Bar
中的方法(即,定义一个与Foo
中已存在的方法同名的方法),则可以使用^{(请注意,上面的代码是针对python3的。有一些小问题会使它在Python2中无法正常工作。如果我建议您学习Python以外的任何其他应用程序,请参见第3章
相关问题 更多 >
编程相关推荐