Python 什么';Perl 6中的uu init_uuu的等效方法是什么?
在Python中,Python 什么';Perl 6中的uu init_uuu的等效方法是什么?,python,raku,Python,Raku,在Python中,\uuuuuu init\uuuu用于初始化类: class Auth(object): def __init__(self, oauth_consumer, oauth_token=None, callback=None): self.oauth_consumer = oauth_consumer self.oauth_token = oauth_token or {} self.callback = callback
\uuuuuu init\uuuu
用于初始化类:
class Auth(object):
def __init__(self, oauth_consumer, oauth_token=None, callback=None):
self.oauth_consumer = oauth_consumer
self.oauth_token = oauth_token or {}
self.callback = callback or 'http://localhost:8080/callback'
def HMAC_SHA1():
pass
在Perl 6中,init的等效方法是什么?方法是
new
?在Perl 6中,每个类都有默认的new
构造函数,可用于初始化对象的属性:
class Auth {
has $.oauth_consumer is required;
has $.oauth_token = {} ;
has $.callback = 'http://localhost:8080/callback';
method HMAC_SHA1() { say 'pass' }
}
my $auth = Auth.new( oauth_consumer => 'foo');
say "Calling method HMAC_SHA1:";
$auth.HMAC_SHA1;
say "Data dump of object $auth:";
dd $auth;
提供以下输出:
调用方法HMAC_SHA1:
通过
对象身份验证的数据转储:
Auth$Auth=Auth.new(oauth_消费者=>“foo”,oauth_令牌=>${},回调=>”http://localhost:8080/callback")
我建议查看和上的页面(后一页包括Håkon Hægland在对您的问题的评论中提到的)。要学究气,最接近的语法等价物是创建一个
子方法构建(或TWEAK
)
这是最接近的翻译:
类身份验证{
拥有$.oauth_消费者;
具有$.oauth_令牌;
有$.callback;
子方法生成(\oauth\u使用者,\oauth\u令牌=Nil,\callback=Nil){
$!oauth_consumer=oauth_consumer;
$!oauth_token=oauth_token//{};
$!callback=callback/'http://localhost:8080/callback';
}
方法HMAC_SHA1(->“通过”){
}
这是一个更惯用的说法
类身份验证{
拥有$.oauth_消费者;
具有$.oauth_令牌;
有$.callback;
子方法构建(
$!oauth_消费者,
$!oauth_令牌={},
$!回调=http://localhost:8080/callback',
) {
#空子方法
}
方法HMAC_SHA1(->“通过”){
}
要真正地道,我会写克里斯托弗所做的。克里斯托弗·巴茨和布拉德·吉尔伯特的回答是正确的。然而,我想指出一些事情,这些事情可能会使我们更容易理解Python和Perl6之间的等价关系。 首先,是充满了他们,包括 请注意,Perl6中与
\uuuuu init\uuuuu
等效的是。。。没有什么。构造函数是从实例变量(包括默认值)自动生成的。然而,在Python中调用构造函数只需要类的名称,而在Perl 6中它使用new
另一方面,从定义自己的new
到使用(通常被定义为submethods
,因此不被子类继承)
最后,您确实有
self
在Perl6方法中引用对象本身。但是,我们通常会这样看待它(如上面的示例所示)self.instance变量
→ <代码>$!实例变量(请注意,-
可以是Perl 6中标识符的有效部分)。请注意,如果属性没有默认值,但必须指定,您也可以将属性标记为是必需的
。您还可以争辩说,Rakudo Perl 6会自动为您生成init
方法。@ElizabethMattijsen谢谢!根据您的建议进行编辑。我认为Python语法会要求使用oauth\u。在Perl 6中,不必两次列出所有公共属性,这真是太好了。我假设它是实例变量,但从文本的上下文来看,这可能被解释为应用于self
,这可能是错误的。它现在更好了吗?是的,现在更好了。说“BUILD,BUILDALL[…]或称为子方法的调整”可能有点误导。如果将它们定义为submethod
,则它们只是子方法。它们通常是这样定义的,这就是它们不可继承的原因。但是,如果您将它们定义为method
,它们将是可继承的。也可编辑。现在好多了?
Calling method HMAC_SHA1:
pass
Data dump of object Auth<53461832>:
Auth $auth = Auth.new(oauth_consumer => "foo", oauth_token => ${}, callback => "http://localhost:8080/callback")