这些子类定义的差异?

时间:2017-03-29 10:03:12

标签: python python-2.7 python-3.x class

有人可以解释从BaseClass派生的以下类定义之间的区别,以及在什么情况下定义它们的方式很重要:

class BaseClass(object):
    def __init__(self):
        # ...

    def as_dict(self):
        # ...


class SomeClass(BaseClass):

    def as_dict(self):
        # Does this somehow change the method compared to 'AnotherClass.as_dict()' below
        return super(SomeClass, self).as_dict()


class AnotherClass(BaseClass): pass

SomeOtherClass = BaseClass

2 个答案:

答案 0 :(得分:2)

由于您向as_dict添加了SomeClass方法,该方法包含 super来电,因此该方法的最终行为没有区别类。总的来说,您已经添加了一些不必要的函数调用,这是有区别的。

AnotherClass的行为与SomeClass相似,因为SomeClassas_dict中没有做任何不同的事情。它像往常一样继承BaseClass的方法。

SomeOtherClass只是 BaseClass的另一个名称,你不是在那里创建一个子类关系,只是附加另一个你可以引用那个类的名字

答案 1 :(得分:0)

这是使用BaseClass使用不同的名称。

class AnotherClass(BaseClass): pass

这是使用BaseClass,但修改方法" as_dict"。as_dict方法中,您可以执行任何操作( ie.modify发送到此方法的参数)然后使用as_dict

运行super(SomeClass, self).as_dict()方法的常用函数
class SomeClass(BaseClass):
    def as_dict(self):
        # Does this somehow change the method compared to 'AnotherClass.as_dict()' below
        return super(SomeClass, self).as_dict()

这只是将BaseClass分配给SomeOtherClass ,这意味着他们可以通过两个关键字使用BaseClass

SomeOtherClass = BaseClass