Python self和Java的区别这个

2022-08-31 12:14:24

很久以前,我就做过一些Python。然而,我现在正在转向Java。我想知道Python“self”方法和Java“this”之间是否有任何区别。

我知道“自我”不是关键词,而“这个”是。这几乎是我能弄清楚的。我是否错过了其他内容?


答案 1

首先,让我纠正你 - 不是一种方法。更进一步:self

从技术上讲,两者都用于同一件事。它们用于访问与当前实例关联的变量。唯一的区别是,您必须显式包含Python中实例方法的第一个参数,而Java则不是这种情况。此外,名称可以是任何东西。正如您已经知道的那样,这不是一个关键字。您甚至可以将其更改为 ,它将正常工作。但是人们喜欢使用,因为它现在已经成为一种惯例。selfthisselfselfthisself

下面是一个简单的实例方法,用于访问 Python 和 Java 中的实例变量:

蟒:

class Circle(object):
    def __init__(self, radius):
        # declare and initialize an instance variable
        self.radius = radius

# Create object. Notice how you are passing only a single argument.  
# The object reference is implicitly bound to `self` parameter of `__init__` method
circle1 = Circle(5);

爪哇岛:

class Circle {
    private int radius;

    public Circle(int radius) {
        this.radius = radius;
    }
}

Circle circle1 = new Circle(5);

另请参阅:


答案 2

关于 Python 中的 self(这里是来源:Python self explanation):

你需要使用自我的原因。是因为 Python 不使用 @ 语法来引用实例属性。Python决定以一种使方法所属的实例自动传递但不自动接收的方式执行方法:方法的第一个参数是调用方法的实例。这使得方法与函数完全相同,并将实际名称留给您使用(尽管self是惯例,当您使用其他东西时,人们通常会对你皱眉头。self对代码来说并不特殊,它只是另一个对象。

Python本可以做一些其他的事情来区分普通名称和属性 - 像Ruby这样的特殊语法,或者像C++和Java那样需要声明,或者可能更不同的东西 - 但它没有。Python的全部目的是使事情变得明确,使其明显是什么,尽管它没有完全在任何地方都这样做,但它确实在例如属性方面做到了这一点。这就是为什么分配给实例属性需要知道要分配给哪个实例的原因,这就是为什么它需要自我

关于Oracle在Java中对此进行解释(这里是来源:Java这个解释):

在实例方法或构造函数中,这是对当前对象的引用 , 该对象是正在调用其方法或构造函数的对象。可以使用 this 从实例方法或构造函数中引用当前对象的任何成员。使用 this 关键字的最常见原因是因为字段被方法或构造函数参数遮蔽。