标签: self

在Go中命名接收器变量'self'误导或良好实践?

我在Go上看到过相当多的博客和视频,据我所知,在编写方法时,没有一个作者使用"self"或"this"作为receiver变量.然而,有关堆栈溢出的问题似乎有很多问题,这让我想到如果将变量命名为"self"这是否具有误导性?

读取方法集的规范并不提供任何证据(在我的解释中).

我似乎记得在某个地方发现它不是真正的自我指针,任何人都可以列出证据或提供任何推理方式,如果有任何问题/陷阱可能会因为将其视为"自我"而产生?

一个简单的例子:

type MyStruct struct {
    Name string
} 
Run Code Online (Sandbox Code Playgroud)

哪种方法更合适,或两者兼而有之?

func (m *MyStruct) MyMethod() error {
    // do something useful
}
Run Code Online (Sandbox Code Playgroud)

要么

func (self *MyStruct) MyMethod() error {
    // do something useful
}
Run Code Online (Sandbox Code Playgroud)

self go

37
推荐指数
4
解决办法
7117
查看次数

什么是Swift中使用的"自我"?

我是Swift的新手,我想知道用什么self和为什么.

我已经在类和结构中看到了它,但我真的发现它们不是必需的,甚至没有必要在我的代码中提到它们.它们用于什么以及为什么?在什么情况下有必要使用它?

我一直在阅读这个问题的许多问题和答案,但没有一个能完全回答我的问题,而且他们总是倾向于将它与thisJava 相比较,我对此并不熟悉.

self ios swift

37
推荐指数
5
解决办法
5万
查看次数

Python - 将self传递给外部函数是否可以

我有一个类A,它由一堆其他类继承.其中一些函数有一些相似的函数,将这些函数定义在其他地方并由需要它们的类调用会很好.但是这些函数调用超类中定义的函数.

class A():
    def imp_func(*args):
        # called by the child class functions

Class B(A):
    def common_func(self):
        # some stuff
        self.imp_func(*args)
Run Code Online (Sandbox Code Playgroud)

所以我创建了我的辅助函数,它将self object参数作为参数,我可以imp_func在辅助函数中调用from.

def helper_func(obj, some_args):
    # some common stuff
    obj.imp_func(*args)

class B(A):
    def common_func(self):
        # unique stuff
        helper_func(self, some_args)
Run Code Online (Sandbox Code Playgroud)

这解决了这个问题.

但我应该这样做吗?这是Pythonic吗?

python self

35
推荐指数
1
解决办法
2万
查看次数

如何用装饰器类装饰实例方法?

考虑这个小例子:

import datetime as dt

class Timed(object):
    def __init__(self, f):
        self.func = f

    def __call__(self, *args, **kwargs):
        start = dt.datetime.now()
        ret = self.func(*args, **kwargs)
        time = dt.datetime.now() - start
        ret["time"] = time
        return ret

class Test(object):
    def __init__(self):
        super(Test, self).__init__()

    @Timed
    def decorated(self, *args, **kwargs):
        print(self)
        print(args)
        print(kwargs)
        return dict()

    def call_deco(self):
        self.decorated("Hello", world="World")

if __name__ == "__main__":
    t = Test()
    ret = t.call_deco()
Run Code Online (Sandbox Code Playgroud)

打印

Hello
()
{'world': 'World'}
Run Code Online (Sandbox Code Playgroud)

为什么self参数(应该是Test obj实例)不作为第一个参数传递给装饰函数decorated

如果我手动完成,例如:

def call_deco(self):
    self.decorated(self, "Hello", …
Run Code Online (Sandbox Code Playgroud)

python class self python-decorators

32
推荐指数
2
解决办法
1万
查看次数

Swift Error:对成员'下标'的模糊引用

我是编码的新手,并选择了一些开源项目来获得这个想法.

我收到错误:

对成员'下标'的模糊引用

在下面的代码中:

let pictures = ( selectedRestaurant["Pictures"] as! NSArray ) // Error

let picture = ( pictures[zoomedPhotoIndex] as! NSDictionary )

let pictureURL = picture["url"] as! String

let imageURL = NSURL(string: pictureURL)
let urlRequest = NSURLRequest(URL: imageURL!)
NSURLConnection.sendAsynchronousRequest(urlRequest, queue: NSOperationQueue.mainQueue()) {
    response, data, error in
    if error == nil && data != nil {

        self.imageView.image = UIImage(data: data!)
        self.imageView.contentMode = UIViewContentMode.ScaleAspectFit

    }
}
Run Code Online (Sandbox Code Playgroud)

self member let subscript swift

32
推荐指数
3
解决办法
4万
查看次数

函数是否有通用的方式来引用自身?

我可以通过下面的代码访问函数内部的python函数的属性:

def aa():
    print aa.__name__
    print aa.__hash__
    # other simliar
Run Code Online (Sandbox Code Playgroud)

但是,如果上面的aa()函数是用于编写其他代码的模板,比方说bb(),我必须写:

def bb():
    print bb.__name__
    print bb.__hash__
    # other simliar
Run Code Online (Sandbox Code Playgroud)

是否有类似于self类方法中的参数的"指针",所以我可以编写这样的代码?

def whatever():
    print self.__name__
    print self.__hash__
    # other simliar
Run Code Online (Sandbox Code Playgroud)

我搜索并发现有人说使用该类来解决这个问题,但重新定义所有现有功能可能会有麻烦.有什么建议?

python reference function self

31
推荐指数
2
解决办法
1万
查看次数

在Objective-C中分配给self

我来自C++世界所以分配的概念this让我不寒而栗:

this = new Object; // Gah!
Run Code Online (Sandbox Code Playgroud)

但是在Objective-C中有一个类似的关键字,self这是完全可以接受的:

self = [super init]; // wait, what?
Run Code Online (Sandbox Code Playgroud)

许多示例Objective-C代码在init例程中使用上述行.我的问题:

1)为什么赋值self有意义(答案如"因为语言允许它"不计算)

2)如果我不在self我的init日常工作中分配会怎样?我是否将我的实例置于某种危险之中?

3)当以下if语句失败时,它意味着什么,我该怎么做才能从中恢复:

- (id) init
{
    self = [super init];

    if (self)
    {
        self.my_foo = 42;
    }

    return self;
}
Run Code Online (Sandbox Code Playgroud)

initialization objective-c self

29
推荐指数
3
解决办法
1万
查看次数

你什么时候在Python中使用'self'?

你是否应该self在Python中引用成员函数时使用(在同一模块中)?

更一般地说,我想知道什么时候需要使用self,不仅仅是方法,还有变量.

python self

29
推荐指数
3
解决办法
4万
查看次数

没有'self'的Python调用方法

所以我刚开始用python编程,我不明白"自我"背后的整个推理.我知道它几乎像一个全局变量一样使用,因此数据可以在类中的不同方法之间传递.当你在同一个类中调用另一个方法时,我不明白为什么你需要使用它.如果我已经上课,为什么我要告诉它?

例如,如果我有:为什么我需要self.thing()?

class bla:
    def hello(self):
        self.thing()

    def thing(self):
        print "hello"
Run Code Online (Sandbox Code Playgroud)

python class self

29
推荐指数
3
解决办法
6万
查看次数

任何人都可以在Perl中解释(我的$ self = shift)

我很难理解OO Perl的交集.my $self = shift;关于这些单独元素的文档很棒,但是我发现它们都没有触及它们如何协同工作.

我一直在使用Moose来创建具有属性的模块,当然,在所述模块中引用模块的属性是有用的.我一遍又一遍地被告知要my $self = shift;在子程序中使用将模块的属性分配给该变量.这是有道理和有效的,但是当我也将参数传递给子例程时,这个过程显然需要@ARGV数组的第一个元素并将它分配给它$self.

有人可以解释我如何使用shift来获取模块属性的内部访问权限,同时还传入@ARGV数组中的参数?

perl attributes self moose shift

29
推荐指数
2
解决办法
3万
查看次数