Одно и то же имя для метода экземпляра и статического метода в python

#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. Пожалуйста, поймите обоснование, почему мне нужно одно и то же имя. Эти функции используются некоторыми клиентами, которым не нужно запоминать слишком много разных имен, но с одинаковой функциональностью.