如何使函数可以从对象和类本身访问?

问题描述 投票:0回答:1

我有一个名为

Storage
的简单类,它有很多方法和属性。

对于这个问题,我只对同时创建

uniques
类方法和属性感兴趣。我不知道这是否可能。我想知道是否存在动态处理:基于是否从类或对象调用
uniques
,那么对于使用的相同输入,我们应该始终得到相同的结果(这里是
data
)。

class Storage:
    def __init__(self, data):
        self.data = data

    @classmethod
    def uniques(cls, data=None):
        if data is None:
            data = cls.data
        return [list(set(item)) for item in data]

不幸的是,当我尝试执行这两个调用时,第一个调用正常工作,但第二个调用出现错误:

data = [["apple", "banana", "apple"], ["cat", "dog", "dog"], ["red", "blue", "red"]]

print(Storage.uniques(data))
# [["banana", "apple"], ["cat", "dog"], ["blue", "red"]]

########################################

print(Storage(data).uniques())

      5 @classmethod
      6 def uniques(cls, data=None):
      7     if data is None:
----> 8         data = cls.data
      9     return [list(set(item)) for item in data]

AttributeError: type object 'Storage' has no attribute 'data'

你们能告诉我如何处理吗?这可能吗?

python class oop
1个回答
0
投票

以下方法有效,但很丑,我不建议使用它:

class Storage:
    def __init__(self, data):
        self.data = data
        
        def _uniques():
            return [list(set(item)) for item in data]
        
        self.uniques = _uniques


    @classmethod
    def uniques(cls, data):
        return [list(set(item)) for item in data]
      
    
# Testing

data = [["apple", "banana", "apple"], ["cat", "dog", "dog"], ["red", "blue", "red"]]

print(Storage.uniques(data))

print(Storage(data).uniques())
© www.soinside.com 2019 - 2024. All rights reserved.