在Python中初始化上下文中的对象

在Python中初始化上下文中的对象,python,initialization,Python,Initialization,这看起来是一个微不足道的问题,但我真的非常感谢您的帮助。也许它也会帮助其他人理解初始化 我正在实现一些东西,在某些上下文中,将获取给定时间段的市场数据,计算回报,然后,稍后,当这段代码开始工作时,将计算投资组合中的最佳权重 现在,我在这个阶段遇到了问题: import pandas.io.data as web import datetime class Black_Litterman: def initialize(context): context.start

这看起来是一个微不足道的问题,但我真的非常感谢您的帮助。也许它也会帮助其他人理解初始化

我正在实现一些东西,在某些上下文中,将获取给定时间段的市场数据,计算回报,然后,稍后,当这段代码开始工作时,将计算投资组合中的最佳权重

现在,我在这个阶段遇到了问题:

import pandas.io.data as web
import datetime

class Black_Litterman:

    def initialize(context):

        context.start = datetime.datetime(2015, 1, 1)
        context.end = datetime.datetime(2015, 1, 28)

        # Select five large cap equities for the portfolio
        # Apple, Google, GE, Microsoft, Amazon
        # later, these should be read in from a csv file stored elsewhere
        context.securities = ['AAPL', 'GOOGL', 'GE', 'MSFT', 'AMZN']
        context.market_cap = [479.51, 377.58, 272.76, 300.86, 180.96]
        context.cap_wts = np.array(context.market_cap)/sum(np.array(context.market_cap))

        # Set Max and Min positions in security
        context.max_notional = 1000000.1
        context.min_notional = -1000000.0

    def get_data(context, data):

        all_prices = []
        cont_start_str = (context.start).strftime("%Y-%m-%d")
        cont_end_str = (context.end).strftime("%Y-%m-%d")

        for i in context.securities:
            f = web.DataReader(i, 'google', context.start, context.end)
            all_prices.append(f.ix[cont_start_str : cont_end_str, 'Open'])

        # Drop missing values and transpose matrix
        daily_returns = all_prices.pct_change().dropna().values.T
当我尝试

cont = Black_Litterman()
Black_Litterman.get_data(cont, 0)
我明白了

这意味着即使cont是这个类的实例,它也并没有用初始参数初始化。 是否有一种方法可以初始化它(不同于传统的(init(self、start、end等))


多谢各位

我真的不明白,你想做什么,但我想用默认参数初始化类的实例,你应该这样做:

class Black_Litterman:

    def __init__(self):

        self.start = datetime.datetime(2015, 1, 1)
        self.end = datetime.datetime(2015, 1, 28)
        ....

    def get_data(self, data):

        all_prices = []
        cont_start_str = self.start.strftime("%Y-%m-%d")
        cont_end_str = self.end.strftime("%Y-%m-%d")

        ...
# Use it like this
bl_instance = Black_Litterman()
bl_instance.get_data(data)

抱歉搞混了!我现在明白了。我只需要打个电话

cont = Black_Litterman()

cont.initialize()
只有那时

Black_Litterman.get_data(cont, 0) 

谢谢大家!

您没有为Black_Litterman创建属性start,因此它不知道context.start应该存在。你的类在总体上没有意义。嗨,Dylan,在初始化部分,我确实创建了这个属性:context.start=datetime.datetime(2015,1,1),但显然,它没有被真正使用。你知道应该做什么来使用这个初始化函数吗?非常感谢。如果您的意思是在
initialize(context)
中,则不是。您正在分配start,但是
context.start对于
context
类型的
Black\u Litterman
不存在。您是否为此类定义了
\uuuu init\uuuu()
?作为python风格指南的旁白:“始终使用self作为实例方法的第一个参数”。如果您计划与任何人共享此代码,则将
“context”
用作
self
引用被认为是不好的形式。谢谢,@tdelaney!事实上,这是我最关心的。我设法使代码正常工作,但我也想学习一些好的编程实践。谢谢你,aleosd!我想出了一个在我的环境下更方便的解决方案,但这也会起作用。
Black_Litterman.get_data(cont, 0)