Python 如何在两级类对象继承权上执行数学运算
我已经建立了一个两级类对象层次结构-我不确定我是否以最有效的方式进行了此操作,或者我是否使用了正确的术语(不太可能),但下面是一个可重复的示例:Python 如何在两级类对象继承权上执行数学运算,python,Python,我已经建立了一个两级类对象层次结构-我不确定我是否以最有效的方式进行了此操作,或者我是否使用了正确的术语(不太可能),但下面是一个可重复的示例: import numpy as np class mem: """this is a member with characteristics""" def __init__(self,i): self.val=i*i class ens: """this is the ensemble""" def
import numpy as np
class mem:
"""this is a member with characteristics"""
def __init__(self,i):
self.val=i*i
class ens:
"""this is the ensemble"""
def __init__(self,n):
self.mem=[]
for i in range(n):
self.mem.append(mem(i))
num=10
e=ens(num)
print(e.mem[4].val)
按预期给出16个答案
我的问题是如何执行数学运算,例如集合成员值的最大值或平均值
我希望我能做这样的事情:
np.mean(e.mem[:].val)
但这就产生了错误
AttributeError: 'list' object has no attribute 'val'
我能开始工作的唯一方法是将值复制到一个列表中,然后执行平均值,但这似乎不是很pythony。。。我相信有一个更整洁的解决办法
l=[]
for i in range(num):
l.append(e.mem[i].val)
np.mean(l)
这起作用并提供:
28.5有关使用迭代器的更多“pythony”方法,可以避免创建重复列表:
num=10
e=ens(num)
from statistics import mean
print(mean(i.val for i in e.mem))
print(max(i.val for i in e.mem))
印刷品:
28.5
81
您可以在类
env
中添加方法或属性,以从mem
中的所有元素中获取val
class ens:
@property
def val(self):
return [x.val for x in self.mem]
然后您可以使用e.val
print(np.mean(e.val))
您使用普通列表来保存元素-您必须将它们保存在numpy的数组或pandas的数据帧中,才能在没有
for
-循环的情况下工作。什么是pval
?你的意思是val
?是的,对不起“val”,剪切和粘贴错误,更正了打字错误,谢谢非常整洁,谢谢。。。我不知道属性功能。如果没有@property
,您将在e.val()
中使用()
来获取值。所以差别不大。
import numpy as np
class mem:
"""this is a member with characteristics"""
def __init__(self,i):
self.val=i*i
class ens:
"""this is the ensemble"""
def __init__(self, n):
self.mem = []
for i in range(n):
self.mem.append(mem(i))
@property
def val(self):
return [x.val for x in self.mem]
num = 10
e = ens(num)
print(e.mem[4].val)
print(np.mean(e.val))