Существует ли Pythonic способ типизировать параметр функции к определенному объекту модели django?
Допустим, у меня есть такая модель:
class Foo():
name = models.CharField()
И функция, подобная этой:
def update_foo_name(foo_object):
foo_object.name = "New Name"
Есть ли способ принудительно ввести тип update_foo_name(), чтобы сюда можно было передать только правильный объект Foo?
То есть что-то вроде update_foo_name(foo_object: Foo.objects).
Прошу прощения, если этот вопрос уже задавался, и заранее благодарю за любые ответы!
питонический способ должен быть
class Foo():
name = models.CharField()
def change_name(self, new_name: str):
self.name = new_name
self.save()
если вы действительно хотите сделать это вне области видимости Foo, в глобальной функции или, например, из класса Bar, то способ гарантии таков:
class Bar()
...
def method_to_change_foo_name_for_any_reason(self, foo: Foo):
assert isinstance(foo, Foo), TypeError("Not a Foo object")
foo.name = "New name that bar gives to foo"
foo.save()
Python не делает статическую проверку типов, смотрите подробности здесь.
Это означает, что это:
def set_foo_name(foo: Foo):
foo.name="New Name"
не вызывает исключения при передаче объекта другого типа.
Вам придется выполнить assert isinstance(foo, Foo) в соответствии с ответом Луида.