【问题标题】:Python: access class properties as arrayPython:以数组形式访问类属性
【发布时间】:2019-02-19 22:28:30
【问题描述】:

最初我想创建一个具有一些字符串和浮点属性的类,其中一个是浮点格式的时间戳。拥有该类的〜10'000个实例的列表,我想使用这10'000个时间戳,就好像我有一个用于向量数学运算的numpy数组一样:

import random
import time

class myclass:
def __init__(self):

    # some properties
    self.ID=random.random()
    self.text1 = 'sometext'
    self.text2 = 'some other text'
    self.timestamp=time.time()

if __name__ == "__main__":
    for i in range(10):
        mylist.append(myclass())

    # now apply math functions to the timestamps, for example 
    # max([all timestamps]) or sum([all timestamps])

我可以只在数组中保留一行而不是类实例,但是使用类的许多优点(此处未显示)都丢失了。

你能帮帮我吗?

【问题讨论】:

  • 你必须自己实现这个接口
  • 你尝试了吗?出了什么问题?这可以像max(x.timestamp for x in mylist) 一样简单地完成。

标签: python arrays class


【解决方案1】:

使用operator.attrgetter为时间戳创建一个可调用对象;将它与map on 实例列表一起使用;使用summax 使用地图对象。

from operator import attrgetter
tstamp = attrgetter('timestamp')
print(sum(map(tstamp, mylist)))
print(max(map(tstamp, mylist)))

【讨论】:

  • 这比max(map(lambda x: x.timestamp, mylist))有什么优势吗?
  • 我想说唯一的好处是您可以定义一次可调用对象并将其分配给有意义的名称,然后在模块中的任何位置使用它。这就是我喜欢使用operator.whatever的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多