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文档,我看到它将引用实例,而不是类(soself.pi
)。我不知道约定,但是我可以想到一个您可能更喜欢使用类名的原因:它向读者传达了pi
是一个类属性。另一方面,您可能希望将Circle2
的名称更改为Sphere
,此时您必须编辑所有使用类属性的函数(除了最原始的文本编辑器外,这很容易)。我建议你使用最能向读者(你未来的自我或其他人)传达你意图的约定。