我一直在寻找这样做的最佳方式,但我没有真正发现任何完全有说服力的东西。Python中的函数多态性
我正在编写一个系统,您拥有User对象和一个管理这些用户的集合。每个用户都有一个名称,我想在管理器中指定一个可以取用户名或用户对象本身名称的函数。
class UserManager:
def remove_user(self,user_or_username):
#If user_or_username is a string
remote.remove(user_or_username)
#If user_or_username is a User object
remote.remove(user_or_username.name)
有没有这样做的好办法,或者是isinstance的使用方式去?
是的,'isinstance'应该没问题。 –
只有当您不知道您是否有名称或用户对象时,多态才真正起作用。大多数情况并非如此。除非你真的需要,否则你应该抵制超载函数的诱惑。在这里你有一个方法,当给出一个字符串只是链接到另一个方法。这是一种代码味道:你应该直接调用另一种方法;当你有一个用户名直接调用'manager.remove(username)'。 – Duncan
您的观点是有效的@邓肯,但在这种情况下,经理是一个中间层,其工作是为我的应用程序的用户进行适当的调用。我想探索这个选项,以知道我在处理时有多大的灵活性! – Parham