#python #class #static-methods
#python #класс #статические методы
Вопрос:
Я пишу небольшую библиотеку и хочу предоставить пользователям два подхода к одной и той же функциональности: методом экземпляра и статическим методом. Вот упрощенный пример:
class ClassTimesAdd(object):
def __init__(self, a, b):
self.a = a
self.b = b
def TimesAdd(self, c):
return self.a * self.b c
@staticmethod
def TimesAdd(a, b, c):
return a * b c
print(ClassTimesAdd.TimesAdd(1, 3, 7))
ins = ClassTimesAdd(2, 5)
print(ins.TimesAdd(7))
И вы можете обнаружить, что более ранняя функция будет перезаписана, и действительна только последняя. Мне интересно, есть ли какой-нибудь простой метод, который я могу использовать, чтобы заставить оба подхода работать.
Комментарии:
1. Вы можете заставить его работать с пользовательскими дескрипторами или странными метаклассами, но это не стоит дополнительной путаницы и крайних случаев. Просто выберите два имени.
2. статический метод — это просто функция. просто определите его вне класса. таким образом, у вас будет функция и метод экземпляра. Как уже было сказано, статический метод в качестве дополнения к методу экземпляра просто излишне усложняет ситуацию.
3. Что касается python, TimesAdd — это всего лишь один атрибут, прикрепленный к одному дескриптору. Написание собственного дескриптора — это боль. Определенно не стоит.
4. Пожалуйста, поймите обоснование, почему мне нужно одно и то же имя. Эти функции используются некоторыми клиентами, которым не нужно запоминать слишком много разных имен, но с одинаковой функциональностью.