Соглашение для ссылки на атрибуты класса?
Каково соглашение для ссылки на атрибуты класса? Я понимаю, что есть два способа ссылки на атрибуты класса:
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
, Какой способ используется для ссылки на атрибуты класса? Или нет соглашения и это просто вопрос предпочтений?
1 ответ
Это действительно зависит от того, как вы собираетесь его использовать. Class.attribute
установит его как атрибут для всех экземпляров этого класса, в то время как self.attribute
только для конкретных случаев. В твоем случае, pi
всегда (около) 3.14, поэтому он должен быть атрибутом класса, в то время как радиус является специфическим для любого одного круга, поэтому его следует установить как self.radius
,
Также, чтобы сократить ваш код, вы должны использовать только 1 класс окружностей и сделать радиус обязательным (не указывайте по умолчанию), потому что это единственное, что меняется.