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);
首先,让我纠正一下-
self
不是一个方法。进一步:从技术上讲,
self
和this
都用于相同的事情。它们用于访问与当前实例关联的变量。唯一的区别是,必须显式地将self
作为Python中实例方法的第一个参数,而Java则不是这样。此外,名称self
可以是任何内容。这不是一个关键字,你已经知道了。您甚至可以将其更改为this
,它将工作正常。但是人们喜欢使用self
,因为它现在已经成为一种惯例。下面是一个简单的实例方法,它可以访问Python和Java中的实例变量:
Python:
爪哇语:
另请参见:
关于Python中的
self
(这里是源代码:Python self explanation):您需要使用self的原因。因为Python不使用@syntax来引用实例属性。Python决定以一种方式来执行方法,这种方式使方法所属的实例自动传递,而不是自动接收:方法的第一个参数是调用该方法的实例。这使得方法与函数完全相同,并将实际名称留给您使用(尽管self是惯例,当您使用其他东西时,人们通常会对您皱眉。)self对代码并不特殊,它只是另一个对象。
Python可能已经做了一些别的事情来区分普通名字和属性——像露比那样的特殊语法,或者需要像C++和java做的声明,或者可能有些不同的东西——但是它没有。Python的全部都是为了使事情变得明确,使它明显的是什么,尽管它并不是到处都是。它是为实例属性而做的。这就是为什么分配给实例属性需要知道分配给哪个实例的原因,这也是为什么它需要self的原因。。关于Java中由Oracle解释的
this
(这里是源代码:Java this explanation):在实例方法或构造函数中,这个是对当前对象的引用,当前对象是正在调用其方法或构造函数的对象。您可以使用this从实例方法或构造函数中引用当前对象的任何成员。 使用this关键字的最常见原因是字段被方法或构造函数参数隐藏。
注意,super可以保留它自己的版本,Java中的i,但是self,Python中的child总是指的。
Main.java:
Main.py:
输出:
[更新]
原因是Java在
Child
类中的int i
声明使i
成为类范围变量,而在Python子类中没有这样的变量阴影。如果删除Java的Child
类中的int i
,它也将打印7和7。相关问题 更多 >
编程相关推荐