Соглашение для ссылки на атрибуты класса?

Каково соглашение для ссылки на атрибуты класса? Я понимаю, что есть два способа ссылки на атрибуты класса:

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 класс окружностей и сделать радиус обязательным (не указывайте по умолчанию), потому что это единственное, что меняется.

Другие вопросы по тегам