如何在class的成员函数中return一个class实例?

How to return a class instance in member function of a class?

我想在class的成员函数中return一个class实例,我的代码是:

class MyClass(object):
    def __init__(self, *args, **kwargs):
        [snippet]

    def func(self, *args, **kwargs):
        [snippet]
        return class_instnace_of_MyClass

if __name__ == '__main__':
    obj = MyClass(...)
    newobj = obj.func(...)  # type(newobj) is MyClass

我想我可以在 func() 中调用 __init__(),并且 return 是 MyClass 的一个新实例,但我认为这不是 Pythonic 的方式。我该怎么做?谢谢!

__init__ 是 Python 中的 class' 构造函数。在任何情况下它都不会 return 任何东西,这意味着它的值是 None。将空参数传递给 func() 是徒劳的。您的假设是正确的,这不是创建另一个 MyClass.

实例的 Pythonic 方法

如果您想创建 MyClass 的新实例,只需这样做:

obj = MyClass(...) # First instance
newobj = MyClass(...) # Add another instance

阅读有关 class 个对象及其实例化的更多信息 here

return一个方法的新实例,在方法中实例化class,然后return那个新实例,像这样:

class MyClass(object):
    def __init__(self, *args, **kwargs):
        pass

    def func(self, *args, **kwargs):
        ...
        return MyClass(...)

if __name__ == '__main__':
    obj = MyClass(...)
    newobj = obj.func(...) 

或者不用 旋转木马,你可以 newobj = MyClass(...)

我觉得你应该为此使用 @classmethod 装饰器,如果我没看错你的问题的话。类似于:

class myClass(object):

    def __int__(name):
        self.name = name

    @classmethod
    def from_fancy(cls, name):
        #do something with name, maybe make it 
        #lowercase or something...
        return cls(name)

例如,在 pandas 包中,您可以通过执行 pandas.DataFrame.from_csv(...)pandas.DataFrame.from_json(...) 之类的操作来创建 DateFrame 对象。其中每一个都是 class 方法,其中 return 一个 DataFrame 对象,使用不同的初始数据集(csv 文本文件或 JSON 文本文件)创建。

例如,您可以这样称呼它:

my_new_object = myClass.from_fancy("hello world")

@classmethod here

上有一个很好的话题