Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的子类函数返回错误_Python_Python 2.7 - Fatal编程技术网

Python中的子类函数返回错误

Python中的子类函数返回错误,python,python-2.7,Python,Python 2.7,我正在编写一些代码,这些代码由一个一般的超类和一些属性略有不同的更具体的子类组成。我已经设置了其中一个子类并在其中定义了一个函数,但是当我调用该函数(如subclass.function(args))时,我收到一个错误,说我包含了错误数量的参数: TypeError Traceback (most recent call last) <ipython-input-5-45d26bca20e5> in <module

我正在编写一些代码,这些代码由一个一般的超类和一些属性略有不同的更具体的子类组成。我已经设置了其中一个子类并在其中定义了一个函数,但是当我调用该函数(如subclass.function(args))时,我收到一个错误,说我包含了错误数量的参数:

TypeError                                 Traceback (most recent call last)
<ipython-input-5-45d26bca20e5> in <module>()
     80 
     81 example = CR0098('test',10,10)
---> 82 example.Curve(34)

TypeError: Curve() takes exactly 1 argument (2 given)
TypeError回溯(最近一次调用)
在()
80
81示例=CR0098(“测试”,10,10)
--->82示例。曲线(34)
TypeError:Curve()正好接受1个参数(给定2个)
我似乎无法解决这个问题。代码如下所示:

import math
class Spectra(object):
    def __init__(self, name, PGA=0.3, Damping=5):
        self.name = name
        self.PGA = PGA
        self.Damping = Damping

class CR0098(Spectra):
   def __init__(self, name, vaRatio, ADV, PGA=0.3, Damping=5):
        Spectra.__init__(self,name,PGA,Damping)
        self.vaRatio = vaRatio
        self.ADV = ADV


   def Curve(freq):
    if self.Damping == 0.5: #Factors from NUREG 98 Table 3 based on damping percentage
        AperAprime = 5.1
        VperVprime = 3.84
        DperDprime = 3.04
    elif self.Damping == 1:
        AperAprime = 4.38
        VperVprime = 3.38
        DperDprime = 2.73
    elif self.Damping == 2:
        AperAprime = 3.66
        VperVprime = 2.92
        DperDprime = 2.42
    elif self.Damping == 3:
        AperAprime = 3.24
        VperVprime = 2.64
        DperDprime = 2.24
    elif self.Damping == 5:
        AperAprime = 2.71
        VperVprime = 2.3
        DperDprime = 2.01
    elif self.Damping == 7:
        AperAprime = 2.36
        VperVprime = 2.08
        DperDprime = 1.85
    elif self.Damping == 10:
        AperAprime = 1.99
        VperVprime = 1.84
        DperDprime = 1.69
    else:
        pass
    factor = 386.4 #Factor converts g's to in per sec^2
    vPrime = self.vaRatio * self.PGA #V' calculation
    dPrime = self.ADV *(vPrime**2)/(self.PGA*factor)
    A = self.PGA*AperAprime*factor #Peak Spectral Acceleration
    V = vPrime * VperVprime #Peak Spectral Velocity
    D = dPrime * DperDprime #Peak spectral displacement

    #Control Points
    sF1 = 0.1 #Freqency for control point 1
    sA1 = D/((2*math.pi*(0.1))**2) #Point 1 with freqency of 0.1 hz
    sF2 = (V/D)/(2*math.pi) #Frequency for point 2 in hz
    sA2 = D/((2*math.pi*(sF2))**2) #Acceleration for Point 2
    sF3 = (A/V)/(2*math.pi) #frequency for point 3 in hz
    sA3 = V/(2*math.pi*sF3) # Acceleration for point 3 
    sF4 = 8 #Frequency for control point 4
    sA4 = sA3 #Acceleration for control point 4, same as point 3
    sF5 = 33 #Frequency for control point 5, rigid
    sA5 = self.PGA #Acceleration for control point 5

    aSlope = math.log10(sA5/sA4)/math.log10(sF5/sF4) #Acceleration slope factor

    dispA = D * ((2*math.pi * freq)**2)/factor #Spectral Acceleration based on spectral displacement
    velA =  V * (2*math.pi * freq)/factor #Spectral Acceleration based on spectral velocity
    AFactor = math.log10(sA4)+math.log10(freq/sF4)*aSlope #Special acceleration factor

    if freq < sF4: #calculates the acceleration based on which frequency range
        accelA1 = A/factor
    else:
        accelA1 = 10**AFactor
    accelA = max(accelA1, sA5) #verifies that the acceleration is above the rigid acceleration

    SpectralAcceleration = min(dispA,velA,accelA)
    return SpectralAcceleration

example = CR0098('test',10,10)
example.Curve(34)
导入数学
类别光谱(对象):
def __;初始(自我,名称,PGA=0.3,阻尼=5):
self.name=名称
self.PGA=PGA
自阻尼=阻尼
CR0098类(光谱):
定义初始值(自、名称、变量、ADV、PGA=0.3、阻尼=5):
光谱。初始(自、名称、PGA、阻尼)
self.vaRatio=vaRatio
self.ADV=ADV
def曲线(频率):
如果自阻尼==0.5:#NUREG 98表3中基于阻尼百分比的系数
aproprime=5.1
VperVprime=3.84
DperDprime=3.04
elif自阻尼==1:
平均值=4.38
VperVprime=3.38
DperDprime=2.73
elif自阻尼==2:
平均值=3.66
VperVprime=2.92
DperDprime=2.42
elif自阻尼==3:
平均值=3.24
VperVprime=2.64
DperDprime=2.24
elif自阻尼==5:
平均值=2.71
VperVprime=2.3
DperDprime=2.01
elif自阻尼==7:
aproprime=2.36
VperVprime=2.08
DperDprime=1.85
elif自阻尼==10:
AperAprime=1.99
VperVprime=1.84
DperDprime=1.69
其他:
通过
系数=386.4#系数将g每秒转换为英寸^2
vPrime=self.vaRatio*self.PGA#V'计算
dPrime=self.ADV*(vPrime**2)/(self.PGA*因子)
A=自身.PGA*个人隐私*系数#峰值谱加速度
V=vPrime*VperVprime#峰值光谱速度
D=dprome*DperDprime#峰值光谱位移
#控制点
sF1=0.1#控制点1的频率
sA1=D/((2*math.pi*(0.1))**2)#频率为0.1 hz的点1
sF2=(V/D)/(2*math.pi)#点2的频率,单位为hz
sA2=D/((2*math.pi*(sF2))**2)#点2的加速度
sF3=(A/V)/(2*math.pi)#点3的频率,单位为hz
sA3=V/(2*math.pi*sF3)#点3的加速度
sF4=8#控制点4的频率
sA4=sA3#控制点4的加速度,与点3相同
sF5=33#控制点5的频率,刚性
sA5=控制点5的self.PGA#加速度
aSlope=math.log10(sA5/sA4)/math.log10(sF5/sF4)#加速度斜率系数
dispA=D*((2*math.pi*freq)**2)/系数#基于谱位移的谱加速度
velA=V*(2*math.pi*freq)/系数#基于谱速度的谱加速度
AFactor=math.log10(sA4)+math.log10(freq/sF4)*aSlope#特殊加速度系数
如果频率
您忘记了方法定义中的
self
参数。

您忘记了方法定义中的
self
参数。

您忘记了
曲线定义中的
self
参数:

def Curve(self, freq):

第一个隐式参数始终是当前实例上的引用。有关这个非常常见的主题的更多解释,请参阅。

您忘记了
曲线定义中的
self
参数:

def Curve(self, freq):

第一个隐式参数始终是当前实例上的引用。有关此常见主题的更多说明,请参阅。

您需要使用
self
作为第一个参数来定义方法:

def Curve(self, freq):
每次调用实例方法时,都会在其他参数之前隐式传递此参数。正如所写的,self被传递到
freq
参数,没有任何东西可以接受实际的
freq
参数


从开始的
self

从对象的方法引用对象的成员没有简写法:方法函数是用表示对象的显式第一个参数声明的,该参数由调用隐式提供


您需要使用
self
作为第一个参数来定义方法:

def Curve(self, freq):
每次调用实例方法时,都会在其他参数之前隐式传递此参数。正如所写的,self被传递到
freq
参数,没有任何东西可以接受实际的
freq
参数


从开始的
self

从对象的方法引用对象的成员没有简写法:方法函数是用表示对象的显式第一个参数声明的,该参数由调用隐式提供


你忘了在定义行中添加
self
)你忘了在定义行中添加
self
:)完美。再一次,我的无知是无止境的。谢谢,完全修好了。太好了。再一次,我的无知是无止境的。谢谢,完全修好了。