小编For*_*ang的帖子

用于C++运算符重载的Python绑定

我有一个类似于以下的类:

class A {
    vector<double> v;
    double& x(int i) { return v[2*i]; }
    double& y(int i) { return v[2*i+1]; }
    double x(int i) const { return v[2*i]; }
    double y(int i) const { return v[2*i+1]; }
}
Run Code Online (Sandbox Code Playgroud)

我想让以下Python代码工作:

a = A()
a.x[0] = 4
print a.x[0]
Run Code Online (Sandbox Code Playgroud)

我在想的__setattr____getattr__,但如果它的工作原理不清楚.另一种方法是实现以下Python:

a = A()
a['x', 0] = 4
print a['x', 0]
Run Code Online (Sandbox Code Playgroud)

不如前一个好,但可能更容易实现(用__slice__?).

PS.我正在使用sip进行绑定.

谢谢.

c++ python reference python-sip

6
推荐指数
1
解决办法
1262
查看次数

doc为__getattr__定义了属性

我必须自定义__getattr__调用另一个函数来读取.

除了help(object.attr)不起作用之外,这种方法很有效.此代码用于交互式环境,因此help()对我们很重要.

是否有更好的设计来实现相同的功能,但help()运行良好.

python pydoc getattr

5
推荐指数
1
解决办法
393
查看次数

为什么"我的@variable"在sub中并且由sub/sub修改的行为如此奇怪

我有一个奇怪的表现(对Python程序员)子程序,其简化如下:

use strict;
use Data::Dumper;
sub a {
  my @x;
  sub b { push @x, 1; print "inside: ", Dumper(\@x); }
  &b;
  print "outside: ", Dumper(\@x);
}
&a;
&a;
Run Code Online (Sandbox Code Playgroud)

我发现结果是:

inside: $VAR1=[ 1 ]
outside: $VAR1 = [ 1 ]
inside: $VAR1=[1, 1]
outside: $VAR1= []
Run Code Online (Sandbox Code Playgroud)

我还以为是打电话时&a,@x是空数组后" my @x"之后有一个元素" &b",然后死了.我每次打电话&a都是一样的.所以输出应该是全部$VAR1 = [ 1 ].

然后我读了一些像命名子例程在符号表中定义一次,然后我做" my $b = sub { ... }; &$b;",这对我来说似乎有意义.

如何解释?

perl scope subroutine

4
推荐指数
1
解决办法
163
查看次数

标签 统计

python ×2

c++ ×1

getattr ×1

perl ×1

pydoc ×1

python-sip ×1

reference ×1

scope ×1

subroutine ×1