下面我定义了一个带有一些功能的基本类。
我不确定从一个函数传递数据的最佳方法是在另一个函数中使用。
我的解决方案是将数据帧作为参数传递给函数。我相信有一种更好,技术更正确的方式,所以请把它叫出来。
我想要理解的是为什么类中的某些函数在调用它们时需要使用(),而其他函数只能使用函数名称来调用。
启动名为“market”的ASX对象后,两个例子是:
返回:数据框
返回一个系列
class YourError( Exception ): pass
class asx(object):
def __init__(self, name):
try:
#initialise
self.name = name
#all companies on asx downloaded from asx website csv
df = pd.read_csv('http://asx.com.au/asx/research/ASXListedCompanies.csv', skiprows=1)
df.columns = ["company","asx_code","industry"]
df["yahoo_code"] = df["asx_code"]+".AX"
self.companies = df
self.industry = self.all_industry(df)
self.valid_stocks = self.valid_stocks(df)
self.valid_industry = self.valid_industry(df)
except:
raise YourError("asx companies CSV not available")
def all_companies(self):
return self.companies
def valid_industry(self,df):
return df["industry"].value_counts()
def all_industry(self,df):
return df["industry"].value_counts()
def valid_stocks(self,df):
return df[(df["industry"]!= "Not Applic") & (df["industry"]!="Class Pend")]
market = asx("asx")
market.all_companies()
market.valid_industry
答案 0 :(得分:1)
所有功能都需要()
,但您在__init__
中做了一些讨厌的事情,用系列替换了函数。
self.valid_industry = self.valid_industry(df)
这将覆盖函数valid_industry
,使其不再是已创建实例的函数,而是从self.valid_industry(df)
返回的值
不要对会员属性和方法使用相同的名称,所有这些都是有意义的。
对于您的方法,您不需要传递df
作为参数,因为您已将其分配给self.companies
,因此您的
def valid_industry(self,df):
return df["industry"].value_counts()
变为:
def valid_industry(self):
return self.companies["industry"].value_counts()