如何在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
上有一个很好的话题
我想在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
.
如果您想创建 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