1

我正在解析一个文本文件并在文本文件中的每行创建一个对象。在解析每一行时,我创建一个时间戳,我希望将其与对象本身一起返回给调用代码。

我意识到并且目前正在通过将时间戳存储在对象本身中并在创建对象后访问它来实现它,但我发现如果我可以在创建对象时返回 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()

干杯。

4

1 回答 1

4

不能返回任何东西,只能None__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 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

我不认为摆脱这条额外的生产线保证设计一个工厂。

于 2013-04-08T12:01:57.860 回答