是否有一种 Pythonic 方法可以将函数参数键入特定的 Django 模型对象?

Is there a Pythonic way to type a function parameter to a specific django model object?

假设我有这样一个模型:

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).

如果有人问过这个问题,我们深表歉意,在此先感谢您的回复!

pythonic 方式应该是

class Foo():
    name = models.CharField()
    
    def change_name(self, new_name: str):
        self.name = new_name
        self.save()

如果你真的想在 Foo 范围之外,在全局函数中或从 Bar class 中执行它,例如,保证的方法是:

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不做静态类型检查,see details here.


意思就是这个:

def set_foo_name(foo: Foo):
    foo.name="New Name"
当您传入其他类型的对象时,

不会引发异常

您必须 运行 assert isinstance(foo, Foo) 按照 Luid 的回答。