【问题标题】:Specify a class attribute as an argument to a class method python class object将类属性指定为类方法的参数 python 类对象
【发布时间】:2020-12-25 05:49:23
【问题描述】:

我创建了一个类对象如下:

class Dummy:
    def __init(self, **kwargs):
        self.__dict__ = kwargs

我创建一个类的实例如下:

dummy_df = pd.DataFrame([['Valid','NY',12],['Invalid','DD',6],['Valid','CA',18],['Valid','Total',30],['Invalid','Total',6]], columns = ['Type','Value','Count'])

dummy_dict = {'dummy_attribute':dummy_df}

dummy_instance = Dummy(**dummy_dict)

dummy_instance.dummy_attribute

      Type  Value  Count
0    Valid     NY     12
1  Invalid     DD      6
2    Valid     CA     18
3    Valid  Total     30
4  Invalid  Total      6

现在我想为 Dummy 类创建一个方法,将一个属性名称作为参数传递给该方法,并从中获取一个数据框,该数据框仅包含与该属性关联的数据框的总数。

例如,输入看起来像这样:

dummy_instance.get_totals('dummy_attribute')

输出如下:

      Type  Value  Count
3    Valid  Total     30
4  Invalid  Total      6

【问题讨论】:

    标签: python class methods attributes parameter-passing


    【解决方案1】:

    您可以使用hasattr, getattr, setattr,查询、获取和设置类属性:

    import pandas as pd
    
    class Dummy:
        def __init__(self, **kwargs):
            for k, v in kwargs.items():
                # Checks each key as class attribute
                if not hasattr(self, k):
                    # Sets key
                    setattr(self, k, v)
                else:
                    # Key already used!
                    print("Error attribute name: %s already used!" % k)
    
        def get_totals(self, name):
            if not hasattr(self, name):
                print("Error: attribute not found!")
                return
    
            # gets the attribute from the class, like self.<name>
            df = getattr(self, name, None)
            # Filter dataframe
            return df.loc[df['Value']=='Total']
    
    
    
    columns = ['Type','Value','Count']
    dummy_df1 = pd.DataFrame([['Valid','NY',12],['Invalid','DD',6],['Valid','Total',12],['Invalid','Total',6]], columns=columns)
    dummy_df2 = pd.DataFrame([['Valid','NY',22],['Invalid','DD',7],['Valid','Total',22],['Invalid','Total',7]], columns=columns)
    
    dummy_dict = {'dummy_attribute_1': dummy_df1, 'dummy_attribute_2': dummy_df2}
    
    dummy_instance = Dummy(**dummy_dict)
    result = dummy_instance.get_totals('dummy_attribute_1')
    print(result)
    

    输出:

          Type  Value  Count
    2    Valid  Total     12
    3  Invalid  Total      6
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      • 2020-08-01
      • 1970-01-01
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      相关资源
      最近更新 更多