Я искал лучший способ сделать это, но я действительно не нашел ничего абсолютно убедительного.Функциональный полиморфизм в Python
Я пишу систему, в которой у вас есть объекты Пользователя и коллекция, которая управляет этими Пользователями. У каждого пользователя есть имя, и я хочу указать функцию в менеджере, которая может либо взять имя пользователя, либо сам объект пользователя.
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 (имя пользователя)' непосредственно. – Duncan
Ваша точка действительна @Duncan, но в этом случае менеджер является промежуточным слоем, и его задача состоит в том, чтобы сделать правильные запросы для пользователя моего приложения. Я хотел изучить этот вариант, чтобы узнать, какую гибкость я имел в своем распоряжении! – Parham