Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 访问派生类中已更改的基类实例属性_Python_Python 2.7_Inheritance_Instance Variables - Fatal编程技术网

Python 访问派生类中已更改的基类实例属性

Python 访问派生类中已更改的基类实例属性,python,python-2.7,inheritance,instance-variables,Python,Python 2.7,Inheritance,Instance Variables,我很难理解继承中实例变量的逻辑。 这是我的(简化)代码,带有解释我如何理解其行为的注释: class Main(object): def __init__(self): self.p = Parent() # self.parameter = [] self.c = Child() # self.parameter = [] def run(self): self.p.setting() # assigning value

我很难理解继承中实例变量的逻辑。 这是我的(简化)代码,带有解释我如何理解其行为的注释:

class Main(object):

    def __init__(self):
        self.p = Parent()  # self.parameter = []
        self.c = Child()  # self.parameter = []

    def run(self):
        self.p.setting()  # assigning value to self.parameter
        self.c.getting()


class Parent(object):

    def __init__(self):
        self.parameter = []

    def setting(self):
        self.parameter = [1, 2, 3]


class Child(Parent):
    # not redefining __init__, so Parent __init__ is called

    def getting(self):
        # value was assigned to self.parameter in setting method,
        # called before getting
        print self.parameter


Main().run()

获取
打印的是
[]
,而不是我预期的
[1,2,3]
。为什么会这样?既然
Child
Parent
共享
\uuuu init\uuuu
,那么在开始时
self.parameter=[]
对两者都是如此,但为什么在调用
Child()之后很长一段时间给它赋值时它仍然是
[]
?如何更改
get
中的
self.parameter
值?

您不是从
Main
中的任何内容继承,而是添加成员变量。你表达的是一种“有”的关系,而不是“是”

要继承,请将
Main
定义为:

class Main(Child):

    def run(self):
        self.setting()
        self.getting()

使用当前代码,您可以在调用
main\u instance.run()
后检查
main\u instance.p.parameter
,并查看
[1,2,3]
是否返回。

您不是从
main
中的任何内容继承,而是添加了成员变量。你表达的是一种“有”的关系,而不是“是”

要继承,请将
Main
定义为:

class Main(Child):

    def run(self):
        self.setting()
        self.getting()

使用当前代码,您可以在调用
main\u instance.run()
后检查
main\u instance.p.parameter
,并查看
[1,2,3]
是否返回。

让我们来看看代码的执行过程

  • main
    实例是使用
    main()
    创建的
  • 此时,我们有
    main.p=[]
    main.s=[]
    ,如
    main中所定义

  • 调用
    main.run()
    ,它调用
    main.p.setting()
    main.c.get()
  • 因此,现在,
    main.p.setting()
    main.p
    参数值更改为
    [1,2,3]
    ,而
    main.c.setting()
    只打印自己的
    参数值,该值仍然是
    []
    ,因为它从未被修改过

    如果要修改
    main.c.参数
    value,只需调用
    main.c.设置()


    让我们来看看代码的执行情况

  • main
    实例是使用
    main()
    创建的
  • 此时,我们有
    main.p=[]
    main.s=[]
    ,如
    main中所定义

  • 调用
    main.run()
    ,它调用
    main.p.setting()
    main.c.get()
  • 因此,现在,
    main.p.setting()
    main.p
    参数值更改为
    [1,2,3]
    ,而
    main.c.setting()
    只打印自己的
    参数值,该值仍然是
    []
    ,因为它从未被修改过

    如果要修改
    main.c.参数
    value,只需调用
    main.c.设置()


    Python不是Java;不是每件事都必须是一门课。摆脱
    Main
    。Python不是Java;不是每件事都必须是一门课。摆脱
    Main