Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop - Fatal编程技术网

Python 使用继承并在其他类中调用

Python 使用继承并在其他类中调用,python,oop,Python,Oop,代码: 我有这四门课。我想做的是,在我的前三个类中,我有继承权。在我的d类中,如果金额为1或2,我尝试调用相应的方法。相反,它给了我这个输出: class aa: def getDis(): return 0 class bb(aa): def getDis(): return 10 class cc(aa): def getDis(): return 15 class d: def __init__(self

代码:

我有这四门课。我想做的是,在我的前三个类中,我有继承权。在我的d类中,如果金额为1或2,我尝试调用相应的方法。相反,它给了我这个输出:

class aa:
    def getDis():
        return 0

class bb(aa):
    def getDis():
        return 10

class cc(aa):
    def getDis():
        return 15

class d:
    def __init__(self,cust):
        self.cust = cust
        self.memberLevel = aa()

    def cgl(self,amt):
        if amt ==1:
            self.memberLevel = bb()
        elif amt ==2:
            self.memberLevel = cc()
        else:
            self.memberLevel = aa()
输出:

 d1 = d('one')
 d1.cgl(1)
 print(d1.memberLevel)


因此需要帮助,我如何使用覆盖技术。

您似乎希望看到控制台输出:
10

因为d1.memberLevel是bb类本身(不是值10,也不是返回值10的函数),所以控制台输出显示
。这是直接打印对象时的正确行为

也许您的最后一行控制台代码应该是:

 <__main__.bb object at 0x036D7BF0>
另一个选项是在“d”类中分配值:

成员方法要求“自我”,例如:


你在期待什么?继承在这里有什么关系?一切似乎都按照您的预期工作?现在还不清楚您希望从
print(d1.memberLevel)
得到什么样的输出,因为您实际上并没有调用任何方法,您只是在
cgl
中创建实例,它在前三个类中的固有特性,我正在尝试进行方法重写。如果你看到在我的类中,如果数量是1或2,我调用相应的类方法。我需要从类bb的函数中得到答案10。“我正在调用类的相应方法”-不,你没有,你正在创建类的实例。getDis不是类d的方法。相反,它是类aa、bb、cc中的重写方法。因此,如果结果正确,它应该调用相应的类方法。@Kam是的,但是
memberLevel
aa
或其后代的实例。memberLevel是类d的实例属性。我用aa()初始化了它。如果amt==1:self.memberLevel=bb()self.memberLevel.getDis(),我也这样做了,但它给出的错误是:self.memberLevel.getDis()TypeError:getDis()接受0个位置参数,但1为given@Kam说真的,一步一步地指导你是不现实的,所以;这不是辅导服务。我强烈建议你去读一本像样的教程(参见示例)。
print(d1.memberLevel.getDis())
self.memberLevel = bb().getDis()
def getDis(self):
    return 10