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)
您可以使用self .__ class__而不是强制转换为Book.您的原始添加功能应如下所示:
def __add__(self,other):
return self.__class__(self.name,(self.pages + other.pages))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |