python - '__neg__' 实现。我正在学习python中的魔术方法
问题描述
这是一个多项式类
class Polynomial(object):
def __init__(self, polynomial):
self.p = tuple(polynomial)
def get_polynomial(self):
return self.p
def __neg__(self):
return tuple([tuple([-i[j] if j==0 else i[j] for j in range(len(i))])for i in self.p])
def __add__(self, other):
pass
def __sub__(self, other):
pass
def __mul__(self, other):
pass
def __call__(self, x):
pass
def simplify(self):
pass
def __str__(self):
return 'something'
如果我使用下面的代码,我会收到 -p 有语法错误的错误。有没有不同的方法来覆盖魔法方法?
p = Polynomial([(2, 1), (1, 0)])
print p
print p.get_polynomial()
q = ‑p; q.get_polynomial()
我在 q = -p 处遇到语法错误
解决方案
问题是您的__neg__
方法返回一个, 而不是您的类tuple
的实例。Polynomial
因此,当您尝试调用get_polynomial
它时,它将发生在 a 上tuple
,从而导致错误指出tuple
没有调用的方法get_polynomial
。
AttributeError:“元组”对象没有属性“get_polynomial”
因此,您的__neg__
方法必须返回您的类的实例Polynomial
,如下所示:
def __neg__(self):
return Polynomial([tuple([-i[j] if j == 0 else i[j] for j in range(len(i))]) for i in self.p])
推荐阅读
- python-3.x - MongoDB Aggregate - 按月对带有时间戳(int)的字段进行分组
- sql - 根据下一行和 ID 选择数据
- android - 热重载不起作用,但在 Android Studio 中热重启有效
- c++ - 跳过列表,为什么我们需要不止一个插入?
- tizen - 在 Galaxy Watch 上使用系统图标
- node.js - Reactjs 时区转换
- c# - unity Quaternion.LookRotation 含义
- buildroot - 在 buildroot 中仅安装包的一部分
- hive - 在 hive 中处理 char(1) 和 varcar(2) 的 null
- javascript - ./src/index.js 中的错误模块构建失败(来自 ./node_modules/babel-loader/lib/index.js):