Roh*_*ain 68
首先,让我纠正你 - self不是一种方法.进一步:
从技术上讲两者self并this用于同样的事情.它们用于访问与当前实例关联的变量.唯一不同的是,您必须self明确地将其作为第一个参数包含在Python中的实例方法中,而Java则不是这样.而且,名字self可以是任何东西.正如您所知,它不是关键字.你甚至可以改变它this,它会工作正常.但人们喜欢使用self,因为它现在变得有点习惯.
这是一个访问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);
Run Code Online (Sandbox Code Playgroud)
Java的:
class Circle {
private int radius;
public Circle(int radius) {
this.radius = radius;
}
}
Circle circle1 = new Circle(5);
Run Code Online (Sandbox Code Playgroud)
也可以看看:
01_*_*1__ 33
关于selfPython(这里是源代码:Python自我解释):
你需要使用自我的原因.是因为Python不使用@语法来引用实例属性.Python决定以某种方式执行方法,使得方法所属的实例自动传递,但不会自动传递:方法的第一个参数是调用该方法的实例.这使得方法与函数完全相同,并且留下实际名称以供您使用(尽管自我是惯例,当您使用其他东西时,人们通常会对您不满.)self对代码并不特殊,它只是另一个对象.
Python可以做其他事情来区分普通名称和属性 - 像Ruby这样的特殊语法,或者需要像C++和Java那样的声明,或者可能是更不同的东西 - 但事实并非如此.Python的所有内容都是为了使事情变得明确,让它显而易见的是什么,虽然它并不是完全无处不在,但它确实是为了实例属性.这就是为什么分配一个实例属性需要知道要分配的实例,这就是为什么它需要自我 ...
关于thisJava正在解释Oracle(这里是来源:Java这个解释):
在实例方法或构造函数中,这是对当前对象的引用 - 正在调用其方法或构造函数的对象.您可以使用此方法从实例方法或构造函数中引用当前对象的任何成员.使用this关键字的最常见原因是因为字段被方法或构造函数参数遮蔽.
林果皞*_*林果皞 12
小心超级可以在Java中保留它自己的this.i版本,但是self.i总是在Python中引用孩子.
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
}
}
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
输出:
$ java Main
7
5
$ python Main.py
7
7
Run Code Online (Sandbox Code Playgroud)
[更新]
原因是因为Java int i在Child类中的声明使得i成为类范围变量,而在Python子类化中没有这样的变量阴影.如果你int i在ChildJava类中删除它也会打印7和7.
| 归档时间: |
|
| 查看次数: |
51021 次 |
| 最近记录: |