从另一个只包含自己的另一个调用 class 的实例方法

Calling instance method of class from another another containing only self

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 class get_Max_ID()

中的实例方法调用 get_total_sales()
def get_Max_ID(self):
    print("Max Sale ID here")
    Cust.get_Total_Sales()   

这显然会导致

TypeError: get_Total_Sales() missing 1 required positional argument: 'self'

如果我通过self通过get_Max_ID。它会传递 DB 的自身而不是 Cust。我不确定如何在从 DB class.

调用时传递 Cust 的自身

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

按照 OP 在问题评论中说他们想做的事情,他们可能想要这样的东西:

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

它将遍历客户字典,并且对于每对 key/value 对(idcust)将调用 return Custget_Total_Sales().

然后 max 将从生成的值列表中获取所有单个结果,并且 return 仅获取最大值。

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

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