Нет никаких причин не использовать такие дозорные объекты для таких целей. В качестве альтернативы объекту класса вы также можете создать одноэлементный экземпляр динамически создаваемого типа:

ользуюargspec в функции, которая принимает другую функцию или метод в качестве аргумента и возвращает кортеж, подобный этому:

(("arg1", obj1), ("arg2", obj2), ...)

Это означает, что первым аргументом переданной функции является arg1, и он имеет значение по умолчанию obj1 и так далее.

Вот руб: если он не имеет значения по умолчанию, мне нужно значение заполнителя, чтобы обозначить это. Я не могу использовать None, потому что тогда я не могу различитьнет значения по умолчанию а такжезначение по умолчанию Нет, То же самое для False, 0, -1 и т. Д. Я мог бы сделать его кортежем с одним элементом, но тогда код для проверки его будет уродливым, и я не могу легко превратить его в диктовку. Поэтому я подумал, что создам объект типа None, который не является None, и вот что я придумал:

class MetaNoDefault(type):
    def __repr__(cls):
        return cls.__name__
    __str__ = __repr__

class NoDefault(object):
    __metaclass__ = MetaNoDefault

В настоящее время("arg1", NoDefault) указывает, что arg1 не имеет значения по умолчанию, и я могу делать такие вещи, какif obj1 is NoDefault: и т. д. метакласс делает его печатным как простоNoDefault вместо<class '__main__.NoDefault'>.

Есть ли причина не делать это так? Есть ли лучшее решение?

Ответы на вопрос(3)

Ваш ответ на вопрос