我想知道是否可以使用 setattr 将属性设置为类中的方法,如下所示,因为当我尝试时,我收到一个错误,该错误将在代码后显示:
class Test:
def getString(self, var):
setattr(self.getString, "string", var)
return self.getString
test = Test()
test.getString("myString").string
哪些错误AttributeError: 'method' object has no attribute 'string'
所以我尝试了一下,没有放.string
刚刚尝试过test.getString("myString")
同样的错误,但后来我尝试了它,但没有像这样使用类
def getString(var):
setattr(getString, "string", var)
return getString
getString("myString").string
它像我想要的那样返回“myString”,那么我如何在一个类中执行此操作以及为什么它在一个类之外但在一个类内工作?
type( test.getString )
is builtins.method
并来自文档(methods ),
因为方法属性实际上存储在底层函数上
目的 (meth.__func__
),在绑定方法上设置方法属性是
不允许。尝试在方法上设置属性会导致AttributeError
被提出。
根据您正在寻找的行为,(至少)有两种可能的解决方案。一种是在类方法上设置属性:
class Test:
def getString(self, var):
setattr(Test.getString, "string", var)
return self.getString
test = Test()
test.getString("myString").string # > "myString"
test2 = Test()
test2.getString.string # > this is also "myString"
另一种是使用函数对象:
class Test:
class getStringClass:
def __call__ ( self, var ):
setattr( self, "string", var )
return self
def __init__( self ):
self.getString = Test.getStringClass( )
test = Test( )
test.getString( "myString" ).string # > "myString"
test2 = Test()
test2.getString.string # > this is error, because it does not
# have the attribute 'string' yet
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)