But I noticed how people also raised objections,
that checking for types betrays a "not object oriented" design
На самом деле это называется Стиль печатания утки («Если это похоже на утку и крякает как утка, это должна быть утка».), И это язык Python, который рекомендует использовать этот стиль программирования .
и с уткой набрав что-нибудь, позвоните EAFP (Проще просить прощения, чем разрешения)
presumable more "more object oriented" way of handling this without
explicitly checking for type?
Вы имеете в виду более питонический, в основном то, что будет более питоническим в вашем случае, выглядит примерно так:
def myfunc(val):
cmd_type = 'i'
# forget about passing type to your magicprogram
cmdline = 'magicprogram %s ' % val
Popen(cmdline, ... blah blah)
и в вашей магической программе (я не знаю, ваш ли это сценарий или ...), и потому что
во всех случаях ваша программа получит строку, поэтому просто попытайтесь преобразовать ее в любую
скрипт принять;
from optparse import OptionParser
# ....
if __name__ == '__main__':
parser = OptionParser(usage="blah blah")
# ...
(options, args) = parser.parse_args()
# Here you apply the EAFP with all type accepted.
try:
# call the function that will deal with if arg is string
# remember duck typing.
except ... :
# You can continue here
Я не знаю, каков весь ваш код, но вы можете следовать приведенному выше примеру, он более питоничен, и помните, что каждое правило имеет свое исключение, так что, возможно, ваш случай является исключением
и вам лучше быть с проверкой типа.
Надеюсь, это прояснит для вас вещи.