【问题标题】:Get all the strings out of a created class从创建的类中获取所有字符串
【发布时间】:2021-11-07 21:07:19
【问题描述】:

我有一个这样声明的类:

class StringHolder(object):

    str_a = None
    str_b = None

    def __init__(self, str_a, str_b):

        self.str_a = str_a
        self.str_b = str_b

我将所有对象都保存在一个列表中:

holder: List[StringHolder] = []

holder.append(StringHolder("a", "x"))
holder.append(StringHolder("a", "y"))
holder.append(StringHolder("a", "z"))

holder.append(StringHolder("b", "x"))
holder.append(StringHolder("b", "y"))
holder.append(StringHolder("b", "z")

我想从所有使用的str_a 中获得一个List[str]。我不关心重复,因为我可以通过list(set(theList)) 获得唯一的副本。我必须调整我的课程吗?

【问题讨论】:

  • all_str_a = [h.str_a for h in holder] ?
  • 这很简单。
  • 题外话:在 Python 3 中,声明类时不需要 (object)(这是默认值)。

标签: python python-3.x list


【解决方案1】:

请试试这个:

class StringHolder(object):

    str_a = None
    str_b = None

    def __init__(self, str_a, str_b):   
        self.str_a = str_a
        self.str_b = str_b

holder =[]

holder.append(StringHolder("a", "x"))
holder.append(StringHolder("a", "y"))
holder.append(StringHolder("a", "z"))

holder.append(StringHolder("b", "x"))
holder.append(StringHolder("b", "y"))
holder.append(StringHolder("b", "z"))
lis = []
for x in holder:
  lis.append(x.str_a)
print(set(lis))

【讨论】:

    【解决方案2】:

    你可以试试类似下面的代码:

    class StringHolder(object):
    
        str_a = []
        str_b = []
    
        def __call__(self, str_a, str_b):
            self.str_a.append(str_a)
            self.str_b.append(str_b)
    
    holder = StringHolder() 
    holder("a", "x")
    holder("a", "y")
    holder("a", "z")
    
    holder("b", "x")
    holder("b", "y")
    holder("b", "z")
    
    print(holder.str_a)
    
    

    【讨论】:

      猜你喜欢
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多