2016-10-04 13 views
-3

インスタンスの変数と関数を使用してクラス変数を定義する方法はありますか?おかげPythonでインスタンスの関数と変数を使用してクラス変数を定義する方法

は単純化されたコードは次のようになります。

def ClassA(): 
    X = self.func(self.a) 

    def __init__(self, avalue): 
     self.a = avalue 

    def func(self): 
     return self.a + 5 

NameError:名 '自己' の

+2

クラスはクラスインスタンスの前に存在する必要があるため、これを行うことはできません。 –

+1

インスタンスからクラス変数を設定できます(yes)。インスタンスを持つ前に、インスタンス変数にアクセスすることはできません。おそらくインスタンスが正確に何かを誤解しているのでしょうか? – deceze

答えて

0

が定義されていない第一に、あなたがいないdefclassを使用してクラスを定義します。

selfは、スコープを変更するため、クラスの関数定義の内部でのみ使用する必要があります。あなたの外にあなたはそれを必要としません: x = func(a)

しかし、インスタンスがまだ存在しないため、コードはとにかく動作しません。私はあなたがしようとしたものを推測

0

されました:

class ClassA(): 
    def __init__(self,avalue): 
     self.a = avalue 
     self.X = self.func 

    def func(self): 
     return self.a + 5 

b = ClassA(43) 
b.X() 

出力

48 
0
class A(): 
    def __init__(self): 
     self.y = 0 

    def m(self): 
     A.x = 1 

b = A() 
#print(b.x) doesn't work here since we haven't made it yet. 
b.m() 
print(b.x) #1 
c = A() 
print(c.x) #1 
A.x = 2 
print(c.x) #2 
print(b.x) #2 
print(vars(A)) #{'__dict__': <attribute '__dict__' of 'A' objects>, '__module__': 'builtins', 'x': 2, '__init__': <function A.__init__ at 0x7f15f800d730>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None, 'm': <function A.m at 0x7f15f800d7b8>} 

あなたはこのような何かを探しているでしょうか?

関連する問題