2016-06-27 4 views
-6

私はこのコードを持っている:Pythonの - "はAttributeError:『str』はオブジェクトが属性『のTc』を持っていない(Tcは、引数の一つである)

import numpy as np 
import matplotlib.pyplot as plt 
from scipy.optimize import newton 

R = 8.314e-5 # universal gas constant, m3-bar/K-mol 
class Molecule: 
""" 
Store molecule info here 
""" 
def __init__(self, name, Tc, Pc, omega): 
    """ 
    Pass parameters desribing molecules 
    """ 
    #! name 
    self.name = methane 
    #! Critical temperature (K) 
    self.Tc = -83+273 
    #! Critical pressure (bar) 
    self.Pc = 45.99 
    #! Accentric factor 
    self.omega = 0.011 

def preos(molecule, T, P, plotcubic=True, printresults=True): 
    Tr = T/molecule.Tc # reduced temperature 
    a = 0.457235 * R**2 * molecule.Tc**2/molecule.Pc 
    b = 0.0777961 * R * molecule.Tc/molecule.Pc 
    kappa = 0.37464 + 1.54226 * molecule.omega - 0.26992 * molecule.omega**2 
    alpha = (1 + kappa * (1 - np.sqrt(Tr)))**2 

    A = a * alpha * P/R**2/T**2 
    B = b * P/R/T 

私は私が欲しいの引数を持つ関数preos呼び出すとき:この部分について: "はAttributeError: 'str' はオブジェクトが属性 'のTc' がありません":

def preos(molecule, T, P, plotcubic=True, printresults=True): 
    Tr = T/molecule.Tc # reduced temperature 

そして私GUEのエラーメッセージがあります

preos("methane", 160, 10, "true", "true") 

それは他の引数(Pcとオメガ)に対して同じエラーを持つでしょう。このエラーは何を意味しますか?

+2

あなたのコードは、その機能を正しく推定するにはあまりにもひどくインデントされています - 恐らく、それを修正して構文エラーなしでコンパイルする必要があります。例えば 'preos()'関数の本体は、isn '全くインデントされていません。 – holdenweb

+1

"問題がある"というのは有効な結果ではありません。このコードの結果として、あなたは何を期待していますか、実際に何をしていますか?私たちはすべてリモートでデバッグしているので、あなたの説明に正確になります。あなたの心を読んだり、画面を見たり、データにアクセスすることはできません。 –

+0

'' methane "'は文字列であり、 'Molecule'ではありません。 – user2357112

答えて

0

それはここにあります:あなたは明らかにその文字列に.Tcを呼び出そうと、文字列としてpreos関数に「メタン」を渡している

def preos(molecule, T, P, plotcubic=True, printresults=True): 
    Tr = T/molecule.Tc # reduced temperature 
... 
preos("methane", 160, 10, "true", "true") 

。エラーはまさにそれを言っています。これはIPythonとは関係ありません。つまり、"methane".Tcを実行しようとしています。

編集:あなたが実際に何が起こりたいのかを言うのは難しいですが、クラスとメソッドがあまり得意ではないと思います。

関連する問題