这是因为numpy.ndarray实现了__abs__(self)方法。只要为自己的类提供它,abs()就会神奇地工作。对于非内置类型,您也可以在事后提供此功能。E、 g
class A:
"A class without __abs__ defined"
def __init__(self, v):
self.v = v
def A_abs(a):
"An 'extension' method that will be added to `A`"
return abs(a.v)
# Make abs() work with an instance of A
A.__abs__ = A_abs
abs
函数查找__abs__
方法。您还可以像numpy一样,在类中实现
__abs__
方法,这样abs就可以与它们一起工作。即
这是因为
numpy.ndarray
实现了__abs__(self)
方法。只要为自己的类提供它,abs()
就会神奇地工作。对于非内置类型,您也可以在事后提供此功能。E、 g但是,这对于内置类型(如
list
或dict
)不起作用。sum
在iterable上工作,例如list或numpy数组。abs
用于定义__abs__
方法的值,例如数字或numpy数组:list
s没有定义这个方法,尽管您可以使用map或list理解(map(abs, [1, -1])
和[abs(x) for x in [1,-1]]
)来满足您的需求。如果您喜欢overkill,您还可以将list子类化,并定义一个类似于__abs__
的numpy(但是理解通常更好)相关问题 更多 >
编程相关推荐