【发布时间】:2019-09-20 23:54:17
【问题描述】:
我有一个父类“Parent”,它有一个方法“method1”。此方法使用我想从子类“Child”访问的变量“b”。当我尝试以 self.b 访问它时,python 抱怨说“'Child' 对象没有属性'b'”。我对面向对象编程和 python 非常陌生。所以也许我的理解是不正确的。请帮我解释为什么我无法访问“b”。
class Parent(object):
def __init__(self):
self.a = 1
def method1(self):
b = 2
class Child(Parent):
def __init__(self):
super(Child,self).__init__()
self.vara = self.a
self.varb = self.b
x = Child()
print x.vara
print x.varb
我添加了“自我”。限定符到变量“b”,并在父类的 init 函数中添加相同的内容,认为它将使其对子类可见。
class Parent(object):
def __init__(self):
self.a = 1
self.b = 1
def method1(self):
self.b = 2
class Child(Parent):
def __init__(self):
super(Child,self).__init__()
self.vara = self.a
self.varb = self.b
x = Child()
print x.vara
print x.varb
我期望输出是
1
2
因为我以为method1下的self.b会覆盖init函数中的self.b。 但是,输出是
1
1
【问题讨论】:
-
你从不打电话给
method1,那为什么self.b会被设置为2? -
您需要在
self.varb = self.b行之前的某个时间点执行method1(无论是在 Parent 的 init 还是 Child 的 init 中,都没有关系),因此self.b在完成这项任务的时间。
标签: python