【问题标题】:Calling instance method of class from another another containing only self从另一个只包含自我的另一个调用类的实例方法
【发布时间】:2019-09-01 19:31:37
【问题描述】:
class Cust(object):

    def __init__(self,cust_id,cust_day,cust_amt):
        self.id=cust_id
        self.total=0
        self.days=[cust_day]
        self.amounts=[cust_amt]


    def add_Purchases(self,day,amount):
        self.amounts.append(amount)
        self.days.append(day)
        print("add Purchase Executed for ",self.id,self.amounts)
        print(self.get_Total_Sales())

    def get_Total_Sales(self):
        total = sum(self.amounts)
        return total


class DB(object):

    def __init__(self,filedir):
        self.dir=filedir
        self.DB_cust={}
        self.createDatabase(filedir)    

    def importFile(self,file):
        file.readline() 
        for line in file:
            val=line.split(",") 

            customerID=data[0]
            if customerID in self.DB_cust:
                self.DB_cust[customerID].add_Purchases(val[2],float(val[3]))
            else:
                self.DB_cust[customerID]=Cust(val[0],val[1],val[2],float(val[3]))

我正在尝试获取 maximum value of total 的 ID。我从DB类get_Max_ID()中的实例方法调用get_total_sales()

def get_Max_ID(self):
    print("Max Sale ID here")
    Cust.get_Total_Sales()   

这显然会导致

TypeError: get_Total_Sales() 缺少 1 个必需的位置参数:'self'

如果我通过 get_Max_ID 传递 self。它会传递 DB 的 self 而不是 Cust。我不确定如何在从 DB 类调用 Cust 时传递它的 self。

澄清 - get_Total_Sales() 获取每个客户的总计,但我试图从所有客户实例中获取总计的最大值。 (我还没有写出最大总数的那部分代码)

【问题讨论】:

  • @PirateX 你试过我更新的答案了吗?您没有初始化 cust 类,因此您的错误。
  • @CalebGoodman Cust 正在通过 self.DB_cust[customerID]=Cust(data[0],data[1],data[2],float(data[3]))DB 内部调用
  • @PirateX 是的,因为您在该字典中有多个 Cust 对象,所以问题仍然存在:哪些这些Custget_Total_Sales() 你想要有吗?
  • @uneven_mark 最大值。如果有 3 个客户总共有 5,10 和 15。我想要 15。
  • @PirateX 所以你真的想在字典中的每个Cust 上调用get_Total_Sales(),然后返回具有最高值的那个吗?

标签: python-3.x class self


【解决方案1】:

按照 OP 在问题 cmets 中说他们想要做的事情,他们可能想要类似的东西:

max([cust.get_Total_Sales() for id, cust in self.DB_cust.items()])

它将遍历客户字典,并为每一对键/值对(idcust)调用并返回 Custget_Total_Sales()

然后max 将从生成的值列表中获取所有单独的结果并仅返回最大值。

正如评论中所问的,虽然我认为没有理由不使用理解:

results = []
for id, cust in self.DB_cust.items():
    results.append(cust.get_Total_Sales())
return max(results)

【讨论】:

  • @PirateX 抱歉,现在修复它。
猜你喜欢
  • 2011-12-30
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多