在python中,有没有办法让抽象方法上的装饰器继续执行派生的实现?
例如,在
import abc
class Foo(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
@some_decorator
def my_method(self, x):
pass
class SubFoo(Foo):
def my_method(self, x):
print x
Run Code Online (Sandbox Code Playgroud)
SubFoo的my_method将不会饰some_decorator据我可以告诉.有没有什么方法可以实现这一点,而无需单独装饰每个派生类Foo?
我一直在谷歌搜索没有成功...也许我的关键字只是糟糕.无论如何,假设我有三个numpy.ndarray相同长度的1D ,我想将它们绘制成3D轨迹.此外,我希望能够做以下任何一件事:
z这个演示有一个制作这样一条曲线的例子:
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.gca(projection='3d')
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
ax.plot(x, y, z)
plt.show()
Run Code Online (Sandbox Code Playgroud)

但是我如何实现1或2?欢迎只有一个或另一个的解决方案!提前致谢.
给定的n-m矩阵A,它被保证N> M =秩(A),并给予一个正由-1柱V,什么是检查[A V]的秩为严格的最快方式大于A?
对于我的应用,A是稀疏的,n大约是2 ^ 12,m是1:n-1中的任何位置.比较等级(完整([A v]))在我的机器上花费大约一秒钟,我需要做数万次,所以我很乐意发现更快捷的方式.
我想使用维基百科API一次性返回多个维基百科文章的摘录.我正在尝试,例如,以下请求(我只是随机选择了pageids):
但它只包含第一个pageid的提取,而不是第二个.其他属性似乎没有这个限制.例如
http://en.wikipedia.org/w/api.php?format=xml&action=query&pageids=3258248|11524059&prop=categories
将返回两个pageid的类别.这是一个错误,还是我错过了什么?
这只是一个有趣的问题.假设我有一个二进制函数,它接受方形矩阵并输出相同大小的方形矩阵(或者更一般地说,它的输入类型和大小与其输出类型和大小相同):
function C = myfunc(A,B)
Run Code Online (Sandbox Code Playgroud)
一个例子是mtimes funcion.有什么不同和聪明的方法将其变成可变长度输入功能
function C = myfunc_multi(varargin)
Run Code Online (Sandbox Code Playgroud)
这样的
myfunc(A{1},myfunc(A{2},myfunc(A{3},...myfunc(A{end-1},A{end})...))) ==
myfunc_multi(A{:})
Run Code Online (Sandbox Code Playgroud)
?
这是我遇到的第一个通用解决方案(编辑:除了递归或循环):
function C = multioutput(functionhandle, varargin)
n = length(varargin);
funcstr = functiontostring(functionhandle);
str = regexprep(arrayfun(@num2str,1:n-1),'(.)',[funcstr '(varargin{$1},']);
C = eval(sprintf('%svarargin{%d}%s',str,n,repmat(')',1,n-1)));
end
Run Code Online (Sandbox Code Playgroud)
然后你可以用类似的东西测试它
A = {rand(3) rand(3) rand(3) rand(3) rand(3)};
multioutput(@mtimes,A{:})-A{1}*A{2}*A{3}*A{4}*A{5}
Run Code Online (Sandbox Code Playgroud)
测试它.您还能想到其他任何方式吗?
matlab ×2
python ×2
abc ×1
arguments ×1
decorator ×1
function ×1
matplotlib ×1
performance ×1
rank ×1
wikipedia ×1