如何定义一个方法,以便返回当前类的实例而不是Python中继承的类的实例?

G M*_*G M 4 python inheritance class operator-overloading

我正在尝试重载一个运算符,强制它返回当前类的同一实例的对象,而不是方法重载的父类.

class Book:
    def __init__(self,name,pages):
        self.name=name
        self.pages=pages

    def __add__(self,other):
        return Book(self.name,(self.pages + other.pages))


class Encyclopedia(Book):
    def __init__(self,name,pages):
        Book.__init__(self,name,pages)


a=Encyclopedia('Omina',234)
b=Encyclopedia('Omnia2',244)
ab=a+b
print ab

Out: <__main__.Book instance at 0x1046dfd88>
Run Code Online (Sandbox Code Playgroud)

例如,在这种情况下,我想返回一个Encycolpedia实例(不是一个Book实例)而不会重载另一个运算符__add__与同一行 Encyclopedia而不是Book我尝试过:

return self(self.name,(self.pages + other.pages))
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

如果Class Enclcopedia有另一个属性怎么办:

class Encyclopedia(Book):
    def __init__(self,name,pages,color):
        Book.__init__(self,name,pages)
        self.color=color
Run Code Online (Sandbox Code Playgroud)

Jac*_*b H 6

您可以使用self .__ class__而不是强制转换为Book.您的原始添加功能应如下所示:

def __add__(self,other):
    return self.__class__(self.name,(self.pages + other.pages))
Run Code Online (Sandbox Code Playgroud)