我目前正在重构一些使用全局变量的代码:
import pandas as pd
from datetime import date, timedelta
class test(object):
def __init__(self):
self.fiscal_cal = pd.read_csv(r'c:\CENSORED')
self.today = date.today().strftime("%Y-%m-%d")
self.yesterday = (date.today() - timedelta(1)).strftime("%Y-%m-%d")
def _calc_period_start(self,input_date,period):
month, year, season = map(lambda x: self.fiscal_cal[x][self.fiscal_cal['date']==input_date], ['fmth','fyr','fiscal_season'])
if period == 'month':
return self.fiscal_cal['date'][(self.fiscal_cal['fmth'] == int(month)) & (self.fiscal_cal['fyr'] == int(year))].irow(0)
return self.fiscal_cal['date'][self.fiscal_cal['fiscal_season'] == season.values[0]].irow(0)
def _calc_match_date(self,input_date,years_back=1):
fwk, fyr, fdt = map(lambda x: self.fiscal_cal[x][self.fiscal_cal['date']==input_date], ['fwk','fyr','fdt'])
_ = self.fiscal_cal['date'][(self.fiscal_cal['fdt'] == int(fdt)) & (self.fiscal_cal['fyr'] == int(fyr - years_back))]
return _.item()
def month_start_ty(self):
return self._calc_period_start(self.today,period='month')
def season_start_ty(self):
return self._calc_period_start(self.today,period = 'season')
def match_ly(self):
_ = self._calc_match_date(self.today,1)
return _
def month_start_ly(self):
_ = self._calc_match_date(self.today,1)
return self._calc_period_start(_,period = "month")
def season_start_ly(self):
_ = self._calc_match_date(self.today,1)
return self._calc_period_start(_,period = 'season')
我很困惑我应该在哪里使用方法将信息返回给我的程序 - 或者将方法的输出分配给属性,然后访问/使用
中的属性import pandas as pd
from datetime import date, timedelta
class test(object):
def __init__(self):
self.fiscal_cal = pd.read_csv(r'c:\CENSORED')
self.today = date.today().strftime("%Y-%m-%d")
self.yesterday = (date.today() - timedelta(1)).strftime("%Y-%m-%d")
self.month_start_ty = self._calc_period_start(self.today,period='month')
def _calc_period_start(self,input_date,period):
month, year, season = map(lambda x: self.fiscal_cal[x][self.fiscal_cal['date']==input_date], ['fmth','fyr','fiscal_season'])
if period == 'month':
return self.fiscal_cal['date'][(self.fiscal_cal['fmth'] == int(month)) & (self.fiscal_cal['fyr'] == int(year))].irow(0)
return self.fiscal_cal['date'][self.fiscal_cal['fiscal_season'] == season.values[0]].irow(0)
def _calc_match_date(self,input_date,years_back=1):
fwk, fyr, fdt = map(lambda x: self.fiscal_cal[x][self.fiscal_cal['date']==input_date], ['fwk','fyr','fdt'])
_ = self.fiscal_cal['date'][(self.fiscal_cal['fdt'] == int(fdt)) & (self.fiscal_cal['fyr'] == int(fyr - years_back))]
return _.item()
这些日期作为参数传递给进行API调用的其他函数。
答案 0 :(得分:0)
如果计算值在概念上是您为其计算的对象的属性,并且您希望此对象保存状态,则可以将其存储为属性。如果该类是服务,那么它应该只返回它。
通常以一个服务类计算值的方式完成,另一个 - 值类( POD 保持结果。
所以这取决于上下文,而您的班级名称test
对它没有帮助:)
答案 1 :(得分:0)
嗯,这在黑暗中有点刺痛,但我想这可能就是你在寻找的东西!
class C:
def __init__(self):
self._x
@property
def x(self):
return self._x
@x.setter
def x(self, value):
self._x = x
如果您编写这样的代码,您可以执行此类操作
c = C()
print c.x
c.x = 3
但是当然你可以做更复杂的事情,而不仅仅是更新变量!
查看docs: