首页 > 解决方案 > Python中的类方法没有看到定义的变量

问题描述

我第一次使用 Python 类,即使我在“ init ”中定义了一个变量,类方法仍然给我一个错误,说我没有定义它,感谢任何建议。

import numpy as np
import scipy.stats as si
import pandas as pd

from math import sqrt, exp, log, pi

class Option:
    def __init__ (self, S, K, T, r, price, option):
        self.S = S
        self.K = K
        self.T = T
        self.r = r
        self.price = price
        self.option = option
        self.sigma = self.bs_implied_vol()

    @classmethod
    def bs_price (self, sigma):    
        d1 = (np.log(S / K) + (r + 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))
        d2 = (np.log(S / K) + (r - 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))
        if option == 'call':
            result = (S * si.norm.cdf(d1, 0.0, 1.0) - K * np.exp(-r * T) * si.norm.cdf(d2, 0.0, 1.0))
        if option == 'put':
            result = (K * np.exp(-r * T) * si.norm.cdf(-d2, 0.0, 1.0) - S * si.norm.cdf(-d1, 0.0, 1.0))        
        return result

    @classmethod
    def bs_implied_vol (self):
        vol = 0.5
        epsilon = 1.0  
        abstol = 1e-4  
        i = 0   
        max_iter = 1e3  
        while epsilon > abstol:
            if i > max_iter:
                break
            i = i + 1
            orig = vol
            function_value = self.bs_price(vol) - price
            vega = S * si.norm.pdf(d1) * sqrt(T)
            vol = -function_value/vega + vol
            epsilon = abs(function_value)
        return vol

option = Option (99.4,99.5,0.2,0.001,0.09683,'call')

我得到的错误是:

NameError:名称“S”未定义

标签: pythonclassclass-method

解决方案


推荐阅读