Ну, это зависит от того, что вы хотите сделать и какова ваша цель.
Если у вас есть функция, которая выглядит примерно так:
def some_function(file_thingy):
with open(file_thingy.filename, 'w') as f:
f.write("Icky Icky Icky Patang NeeeeWom!")
Тогда это делает вещи намного более общими - если вы передаете объект с атрибутом .filename
, который является строкой, ваша функция будет работать. Более распространенный пример этого - когда люди говорят о типизировании утки. Если это похоже на утку, ходит как утка и крякает как утка, тогда это утка!
Итак, если у вас есть следующая функция:
def do_duck_things(a_duck):
print(a_duck.appearance)
a_duck.waddle()
a_duck.quack()
print("It must be a duck!")
Тогда вы можете передать ему экземпляр:
class Duck:
def __init__(self):
self.appearance = "White, like the AFLAC duck"
def quack(self):
print("Quaaaaaack!")
def waddle(self):
print("The duck waddles.")
или экземпляр любого из этих классов:
class UglyDuckling:
def __init__(self):
self.appearance = "Suspiciously like a baby goose"
def waddle(self):
print("The ugly duckling waddles a bit like a duck.")
def quack(self):
print("Hoooonk!")
class Human:
def __init__(self):
self.appearance = "Looks like a human in a duck costume"
def waddle(self):
print("Surprisingly, he waddles quite like a duck.")
def quack(self):
print("<A sound quite like Donald Duck would make>")
Так что в вашем случае это действительно зависит от того, что ваша функция должна делать. Если все, что он делает - читает содержимое файла, тогда вы можете (и, вероятно, должны) просто отправить ему имя файла. Но если вы хотите сделать что-то вроде, скажем, проверить файл по сохраненному MD5 или установить этот MD5, тогда вполне уместно передать объект.
НТН