Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.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
python中的属性引用可以与Java中的静态类进行比较吗?_Java_Python_Oop - Fatal编程技术网

python中的属性引用可以与Java中的静态类进行比较吗?

python中的属性引用可以与Java中的静态类进行比较吗?,java,python,oop,Java,Python,Oop,我假设属性引用类似于Java中的静态类 例如:我声明了一个类 >>> class Square: def __init__(self): self.side=0 def area(self): print(self.side*self.side) 那么这一行就行了: >>> Square.side=2 但是在访问“区域”方法时获取错误 >>>

我假设属性引用类似于Java中的静态类

例如:我声明了一个类

>>> class Square:
        def __init__(self):
                self.side=0
        def area(self):
                print(self.side*self.side)
那么这一行就行了:

>>> Square.side=2
但是在访问“区域”方法时获取错误

>>> Square.area()
有人能解释一下python中的属性引用是如何工作的吗?
并澄清我的假设是否正确

要访问area方法,您需要创建正方形对象,因为它是实例方法

square_object=Square()
square_object.side=2
square_object.area() 
#prints 4
有关类、实例方法、类方法的更多信息,请参阅


您可以在python中使用静态方法,但不是那样。还要考虑语义,而不仅仅是粗略的语法

Square
是对每个可能的Square的描述。说
square.size=3
有意义吗?可能不会,因为我们将主体限制在3个单位大小的正方形,而不是每个正方形

这同样适用于
区域
。您不想要“正方形”的面积。您需要一个特定正方形的面积,或者如python中所称的
实例
。因此,通过将
正方形的一个实例分配给一个变量,并使用该变量计算面积,您的程序将获得更多:

>>> s = Square()

>>> s.side = 1
>>> s.area()
1
>>> s.side = 3
>>> s.area()
9

在第一种情况下,您将在类(而不是实例)上设置一个新属性。分配给类属性就像在Java中创建一个静态变量。Python中确实没有“静态类”,也没有真正的需要。静态类实际上只有在Java这样的语言中才有意义,它迫使您为所有内容编写类定义。在Python中,您只需要使用一个带有函数的模块。所以,java中的属性引用与静态类不同??