Почему в python так легко переписать метод класса? - PullRequest
0 голосов
/ 23 марта 2020

Как я могу защитить методы класса Python от неправильного изменения? Есть ли какая-то «защита от записи»?

Пример:

class bar():

    def blob(self):
        return 2

if __name__ == "__main__":

    foo = bar()
    print(foo.blob()) # Returns 2

    foo.blob = 1 # Overwrites the method "blob" without a warning!
                 # foo.blob returns 1, foo.blob() is not callabele anymore :( 

    foo.blib = 1 # Is also possible

    print(foo.blob)
    print(foo.blob())

Когда я вызываю этот скрипт, возвращается:

2
1
Traceback (most recent call last):
  File "blob.py", line 18, in <module>
    print(foo.blob())
TypeError: 'int' object is not callable

Я бы предпочел получить предупреждение.

...