#python #oop #methods #static-methods
Вопрос:
В чем заключаются различия или преимущества Circle1
и Circle2
? Есть ли более правильный путь, чем другой? Единственное преимущество в том, что Circle2
я могу его унаследовать?
class Geometry(object):
def __init__(self, x, y):
self.ptsx = x
self.ptsy = y
class Circle1(Geometry):
def __init__(self, radius):
self.radius = radius
def area(self):
def circle_formula(radius):
return 3.14*radius
return circle_formula(self.radius)
class Circle2(Geometry):
def __init__(self, radius):
self.radius = radius
def area(self):
return self.circle_formula(self.radius)
@staticmethod
def circle_formula(radius):
return 3.14*radius
Я знаю, что правильный способ состоял бы в том, чтобы функция @staticmethod
of Cicle2
была такой же, как area_formula
и при ее наследовании, перепишите ее. Но я сомневаюсь, что если мне действительно придется использовать вспомогательную функцию, которая будет жить только внутри определенного класса, каков наиболее правильный способ ее реализации?
Комментарии:
1. Привет, добро пожаловать в SO! Ваш вопрос основан на мнении, потому что технически оба метода хороши, и то, что вы спрашиваете, является вопросом личных предпочтений. Мы стараемся избегать вопросов, основанных на мнениях, на этой доске.
Ответ №1:
Основное различие между этими двумя классами заключается в том, что при добавлении staticmethod
в метод вы можете получить доступ к этому методу без создания экземпляра класса.
Я имею в виду, я мог бы сделать: Circle2.circle_formula(2)
.
В Circle1 вы должны создать экземпляр класса, чтобы получить доступ к методу вычисления площади;
my_circle = Circle1(2)
my_circle.area()
Но в случае, который вы представляете, я бы добавил логику внутри метода area, поскольку реализован Circle1, без использования функции внутри него. Подобный этому:
class Circle1(Geometry):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14*radius