Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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 引用类属性的约定?_Python_Python 3.x_Attributes_Conventions_Class Variables - Fatal编程技术网

Python 引用类属性的约定?

Python 引用类属性的约定?,python,python-3.x,attributes,conventions,class-variables,Python,Python 3.x,Attributes,Conventions,Class Variables,引用类属性的约定是什么?我知道有两种引用类属性的方法: class Circle1: pi = 3.14 def __init__(self, radius=1): self.radius = radius def get_circumference(): return 2 * self.pi * self.radius class Circle2: pi = 3.14 def __init__(self, radi

引用类属性的约定是什么?我知道有两种引用类属性的方法:

class Circle1:
    pi = 3.14

    def __init__(self, radius=1):
        self.radius = radius

    def get_circumference():
        return 2 * self.pi * self.radius

class Circle2:
    pi = 3.14

    def __init__(self, radius=2):
        self.radius = radius

    def get_circumference():
        return 2 * Circle2.pi * self.radius

第一种方法是将其引用为
self.attribute
,而第二种方法是将其引用为
Class.attribute
。引用类属性的约定是哪种方式?还是没有惯例,只是偏好的问题?

这取决于你将如何使用它
Class.attribute
将其设置为该类的所有实例的属性,而
self.attribute
仅用于特定实例。在您的例子中,
pi
总是(大约)3.14,因此它应该是一个class属性,而半径特定于任何一个圆,因此它应该设置为
self.radius



另外,为了帮助缩短代码,您应该只使用一类圆,并强制使用半径(不要指定默认值),因为这是唯一会发生变化的地方。

我理解类属性和实例属性之间的区别,但我想知道引用类属性的惯例是什么。您可以使用
self.pi
Circle.pi
引用类属性(在我的例子中是
pi
)。我在问这两个中哪一个是约定,如果有的话。哦,好吧,通过阅读Python文档,我看到它将引用实例,而不是类(so
self.pi
)。我不知道约定,但是我可以想到一个您可能更喜欢使用类名的原因:它向读者传达了
pi
是一个类属性。另一方面,您可能希望将
Circle2
的名称更改为
Sphere
,此时您必须编辑所有使用类属性的函数(除了最原始的文本编辑器外,这很容易)。我建议你使用最能向读者(你未来的自我或其他人)传达你意图的约定。