无法使属性在嵌套方法中工作

2024-09-30 18:28:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个带有一些格式选项的类。但我不知道怎么做才好。。。你知道吗

代码产生以下错误:

AttributeError: 'NoneType' object has no attribute 'valuesonly'

class Testings(object):

    def format_as_values_only(self,somedata):
        buildstring=somedata.values()
        return buildstring

    def format_as_keys_only(self):
        pass

    def format_as_numbers(self):
        pass


    def get_data_method(self):
        self.data= {'2_testkey':'2_testvalue',"2_testkey2":"2_testvalue2"}

        @property
        def valuesonly(self):
            return format_as_values_only(self.data)

test=Testings()
print test.get_data_method().valuesonly 

对我来说,重要的是能够得到格式化程序,比如:class.method.formatter类大概。。。你知道吗

谢谢你的任何提示!你知道吗


Tags: selfformatonlydatareturnobjectdefas
2条回答

你不能这样做。方法只是直接在类块中定义的函数。你的函数在另一个函数中,所以它不是一个方法。property修饰符除了在类块中之外是无用的。你知道吗

但是,更基本的是,函数定义只是创建局部名称,与变量赋值或其他任何操作相同。您的valuesonly函数根本无法从get_data_method函数外部访问,因为除了返回值之外,函数内部的任何内容都无法访问。你所做的无异于:

def get_data_method(self):
    a = 2

。然后期望能够从函数外部访问局部变量a。这行不通。调用get_data_method()时,会得到值None,因为get_data_method不会返回任何内容。随后对get_data_method()的结果所做的任何操作都只是对相同的None值进行操作。你知道吗

如果要使用所描述的语法访问对象,则需要使get_data_method返回一个具有valuesonly等属性的对象。换句话说,编写另一个提供valuesonly属性的类,并让get_data_method返回该类的实例。大致轮廓(未经测试):

class DataMethodGetter(object):
    def __init__(self, parent):
        self.parent = parent

    @property
    def valuesonly(self):
        return format_as_values_only(self.parent.data)

class Testings(object):
    # rest of class def here
    def get_data_method(self):
        self.data = {'blah': 'blah'}
        return DataMethodGetter(self)

然而,你应该想想你为什么要这么做。将其设置为直接在Testing对象上调用valuesonly,或者将标志传递给get_data_method,执行类似于get_data_method(valuesonly=True)的操作,可能会更简单。你知道吗

get_data_method没有返回值,因此test.get_data_method()的结果是None。这就是为什么你会有例外。你知道吗

如果你真的想做类似test.get_data_method().valuesonly的事情,要么在Testings上定义valuesonly属性,让get_data_method返回self,要么让get_data_method返回一些新的对象和你想要定义的属性。你知道吗

相关问题 更多 >