Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java类变量&__Python中的初始化方法_Java_Python_Python 3.x - Fatal编程技术网

Java类变量&__Python中的初始化方法

Java类变量&__Python中的初始化方法,java,python,python-3.x,Java,Python,Python 3.x,很久以前我就用Java编写过代码,我记得class关键字是如何在类中的任何方法中都可以访问的 例如 int age int xyz public void abc(int aga,int xyz) { this.age = age; this.xyz = xyz; } 现在在上面的代码中, this.age和this.xyz正在引用类变量。 这两个变量是类变量,在方法abc之外声明, 因此,这两个变量可以在类中的任何位置访问 现在如果我们谈论Python Python中的\u

很久以前我就用Java编写过代码,我记得class关键字是如何在类中的任何方法中都可以访问的

例如

int age
int xyz

public void abc(int aga,int xyz) {
    this.age = age;
    this.xyz = xyz;
}
现在在上面的代码中,
this.age
this.xyz
正在引用类变量。 这两个变量是类变量,在方法abc之外声明, 因此,这两个变量可以在类中的任何位置访问

现在如果我们谈论Python

Python中的
\uuuu init\uuuu
方法是一个构造, 如果我在
\uuuu init\uuuu
中声明任何变量,那么它是否可以在其类中的任何位置访问,即使它是在方法中声明的,就像Java类变量一样

比如说,, 考虑这个代码,

Class Main:
     def __init__(self):
           self._age = None
           self._xyz = None
变量
age
xyz
\uuuu init\uuuu
中声明,我可以在类
Main
的其他方法中访问它们吗? 我可能知道答案是肯定的,但为什么答案是肯定的呢?
变量在方法中声明,而不是声明为类变量,那么其他方法和其他类如何访问它们。

否。将
\uuuuuu init\uuuuu>中的内容定义为
self。xxx
使它们成为实例属性。在Python中,类属性只是在类上定义的,在方法之外

class MyClass(object):

    abc = 0
    xyz = 42

    def __init__(...)
        # and so on

只要没有名为
abc
的实例属性,就可以在任何方法内部使用,例如
self.abc
。如果存在,则实例属性具有优先级。即使在这种情况下,您也可以使用
type(self)访问class属性。abc

中命名的所有属性都是实例属性。这意味着,在创建类的实例时,它们对该实例可用

通过执行
self.
,您可以通过
self
(与Java中的
this
相同)引用它们。请参见下面的演示:

>>> class Main:
...     def __init__(self):
...         self._age = None
...         self._xyz = None
...     def method(self):
...         print self._age, self._xyz
...
>>> test = Main()
>>> test.method()
None None
>>>

在Python中,类是一个对象,“类属性”实际上是指类对象本身的属性,而不是类实例的属性。现在Python对象结构是动态的-您可以在任何地方(是的,甚至在外部方法)根据每个实例添加(或删除)属性-而Java类有一个固定的声明结构,这就是为什么在Java中您必须在class语句体中声明类的结构(它将具有哪些属性),在Python中,通常在初始值设定项中执行此操作

你试过了吗?是的,我试过了,这就是为什么我要问…因为在java中,当我们访问类变量时使用这个变量,但在python中,没有必要在上面的代码中编写self。在我的代码(我正在学习)中,变量age和xyz从未在类中声明过(仅在init中声明),但它们可以在其他类中访问。是的,您可以。只需将其引用为
self.\u age
或甚至
Main()。\u age
如果您想。。。虽然uu通常表示受保护的。。。那只是按照惯例。。。