我很久以前就做过Python了。不过,我现在要转到Java了。我想知道Python "self“方法和Java "this”之间是否有什么区别。
我知道“自我”不是关键词,而“这”是。这几乎就是我能弄明白的。我还有什么遗漏吗?
发布于 2014-02-11 06:51:38
关于Python中的self Python自解释): 的(以下是源代码:)
你需要使用自我的原因。因为Python没有使用@语法来引用实例属性。Python决定以这样一种方式执行方法,即自动传递方法所属的实例,但不自动接收:方法的第一个参数是调用该方法的实例。这使得方法与函数完全相同,将实际名称留给您使用(尽管self是惯例,当您使用其他东西时,人们通常会对您皱眉)。self对代码来说并不特殊,它只是另一个对象。
Python本可以做一些其他的事情来区分普通名称和属性--比如Ruby所具有的特殊语法,或者需要像C++和Java这样的声明,或者更不同的东西--但它没有做到。Python完全是为了使事情变得清晰,清楚地知道是什么,虽然它并不是在任何地方都这样做,但是它可以做一些例如属性。这就是为什么分配给一个实例属性需要知道要分配给哪个实例,这就是为什么它需要自我..。
由甲骨文解释的关于this Java这个解释): 的(以下是源代码:)
在实例方法或构造函数中,这是对当前对象(方法或构造函数正在被调用的对象)的引用。您可以在实例方法或构造函数中引用当前对象的任何成员。使用this关键字的最常见原因是,字段被方法或构造函数参数隐藏。
发布于 2014-02-11 06:56:21
首先,让我纠正一下-- self不是一种方法。进一步:
从技术上讲,self和this都用于同一件事。它们用于访问与当前实例关联的变量。唯一的区别是,您必须在Python中显式地将self作为实例方法的第一个参数,而不是这样。而且,self这个名字可以是任何东西。这不是关键词,你已经知道了。您甚至可以将其更改为this,这样就可以正常工作了。但是人们喜欢使用self,因为现在它已经成为一种惯例。
下面是一个在Python和Java中访问实例变量的简单实例方法:
Python:
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);还请参见:
this发布于 2016-06-06 12:48:24
请小心,超级程序可以保留它自己的版本,我在中使用,但本身,我总是在中引用子版本。
Main.java:
class Parent {
int i;
Parent() {
this.i = 5;
}
void doStuff() {
System.out.println(this.i);
}
}
class Child extends Parent {
int i;
Child() {
this.i = 7;
}
}
class Main {
public static void main(String[] args) {
Child m = new Child();
System.out.println(m.i); //print 7
m.doStuff(); //print 5
}
}Main.py:
class Parent(object):
i = 5;
def __init__(self):
self.i = 5
def doStuff(self):
print(self.i)
class Child(Parent, object):
def __init__(self):
super(Child, self).__init__()
self.i = 7
class Main():
def main(self):
m = Child()
print(m.i) #print 7
m.doStuff() #print 7
m = Main()
m.main()输出:
$ java Main
7
5
$ python Main.py
7
7更新
原因是因为int i类中的i声明使i成为类作用域变量,而在i子类中却没有这样的变量。如果在Java的int i类中删除Child,它也会打印7和7。
https://stackoverflow.com/questions/21694901
复制相似问题