最简单的方法可能是使用类方法。您确实应该使用实例方法,但是创建它们很麻烦,而内置函数可以创建类方法。使用类方法,您的存根将获得对类(而不是实例)的引用作为第一个参数,但是由于它是存根,因此这可能无关紧要。所以:
Product.name = classmethod(lambda cls: "stubbed_name")
请注意,lambda的签名必须与您要替换的方法的签名匹配。另外,当然,由于Python(例如Ruby)是一种动态语言,因此无法保证有人在您获得实例之前不会将您的存根方法切换为其他方法,尽管我希望您很快就会知道如果发生这种情况。
编辑:在进一步调查中,您可以省略
classmethod():
Product.name = lambda self: "stubbed_name"
我试图尽可能地保留原始方法的行为,但实际上似乎并不是必需的(无论如何也不会保留我所希望的行为)。