我正在解析文本文件并在文本文件中每行创建一个对象。 在解析每一行时,我创建了一个时间戳,我希望将其与对象本身一起返回到调用代码。
我意识到并且目前正在通过将时间戳存储在对象本身并在创建对象后访问它来实现它,但我发现如果我可以在创建对象时返回self和时间戳,这对我来说更方便。
我有关于如何做到这一点的建议,但我想知道这是否可以,如果没有,我该如何正确地做到这一点?
class Foo():
def __init__(self, infile):
self.time_stamp = foobar(infile)
self.line = barfoo(infile)
return (self, self.time_stamp)
(obj, time_stamp) = Foo()
干杯。
答案 0 :(得分:4)
你can't return anything but None
from __init__
:
作为构造函数的特殊约束,不能返回任何值;这样做会导致在运行时引发TypeError。
使用工厂功能:
def create_foo(infile):
foo = Foo(infile)
return foo, foo.time_stamp
...
obj, ts = create_foo(a_file)
class Foo(object):
...
@staticmethod:
def create(infile):
obj = Foo(infile)
return obj, obj.time_stamp
...
obj, ts = Foo.create(a_file)
或者,如果您需要它在子类上正常工作,请class method
class Foo(object):
...
@classmethod
def create(cls, infile):
obj = cls(infile)
return obj, obj.time_stamp
...
obj, ts = Foo.create(a_file)
当然,这是最简单的方法:
class Foo(object):
def __init__(self, infile):
self.time_stamp = ...
obj = Foo(a_file)
ts = obj.time_stamp
我不认为摆脱这条额外的线路需要设计工厂。