在 Perl 中,与$self->subname相同吗$self->MYPACKAGE::subname?我是Pythonizer的作者,还有另一段神秘的 Perl 代码,这个代码又来自 CGI.pm。这里的代码采用$self,它是 CGI 包的实例变量,然后调用hidden其中定义的函数,但代码不只是使用$self->hidden(...),它还使用$self->CGI::hidden(...). 当我将其转换为 Python 时self.CGI.hidden(...),我收到一条错误消息,指出 CGI 类没有 CGI 属性。我想知道在这种情况下是否应该创建一个仅指向类实例的 CGI 属性(或者应该指向该类)?无论如何,这到底意味着什么?
package CGI;
...
sub hidden { ... }
...
$self->CGI::hidden(...);
Run Code Online (Sandbox Code Playgroud)
在perl中,$self->subname与$self->MYPACKAGE::subname相同
不。
$self->subnamesubname将在与 object 关联的符号表中查找$self,这是来自被祝福的包的符号表$self。
$self->MYPACKAGE::subname相反,大部分(但不完全是 - 请参阅下面来自 tobyink 的评论)类似于调用MYPACKAGE::subname($self),即它不会在与 关联的符号表中查找方法$self,而是在MYPACKAGE(及其父包)的符号表中查找。$self可能连方法都没有subname。