クラス内のメソッドで定義した変数を同じクラス内の別のメソッドで使いまわすことはできないのでしょうか?
Python
1class Example(): 2 def __init__(): 3 pass 4 5 def function(self): 6 self.attr = 100 7 8 def func(self): 9 100 + self.attr
以上のコードは当該のコードとは全く異なる例として書きました。
例えば上記のように、あるメソッドで定義した変数をそれ以降に出てくるメソッドの中で再度使用したいのですが、そのような処理はできないのでしょうか?
ある変数については以上のような使い方ができているのですが、別の変数ではAttributeErrorが出る状態です。
いまいち変数のスコープについて理解できておらず、初歩的な質問で申し訳ないのですが、ご教示いただけますと幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
なんども計算したくないならキャッシュを作成してはいかがでしょうか。
python
1class Example(): 2 def __init__(self): # self が必要です 3 self.function_cache = None 4 5 def function(self): 6 if self.function_cache is None: 7 # 具体的な計算 8 self.function_cache = 100 9 return self.function_cache 10 11 def func(self): 12 a = 100 + self.function() # 1回目だけ計算する 13 b = 200 + self.function() # 2回目以降は計算済みのキャッシュを返す
投稿2018/09/20 03:03
総合スコア6753
0
ベストアンサー
可能ですが、function
がfunc
より先に呼び出されることが必須です。
この条件はなんともめんどくさいので、普通は__init__
以外で属性の宣言はしません。
投稿2018/09/20 02:14
総合スコア35660
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/20 02:20
2018/09/20 02:26
2018/09/20 02:30
2018/09/20 02:33
2018/09/20 02:47
2018/09/20 02:50 編集
2018/09/20 02:49
2018/09/20 02:51
2018/09/20 02:54
2018/09/20 03:02
2018/09/20 03:02
2018/09/20 03:03
2018/09/20 03:05
2018/09/20 03:13 編集
2018/09/20 03:19
2018/09/20 03:23
2018/09/20 03:28
2018/09/20 03:38 編集
2018/09/20 03:45
2018/09/20 03:49
2018/09/20 03:49
2018/09/20 03:53 編集
2018/09/20 03:57
0
namedtuple(名前付きタプル)で簡易クラスを作る
Python3.7からは「Data Classes」がクラス定義のスタンダードになるかもしれない
@LouiS0616さんのコメントからnamedtuple
で調べて派生的に便利そうな情報見つけました。
Python3.7.0 クラス変数を扱いやすくなる新機能のようです。ご参考までに。
import dataclasses
@dataclasses.dataclass
Python3
1# coding=UTF-8 2import dataclasses 3 4@dataclasses.dataclass 5class Example(): 6 attr: int = 0 7 def __init__(self): 8 self.function() 9 self.func() 10 11 def function(self): 12 self.attr = 100 13 14 def func(self): 15 self.attr += 200 16 17# 0+100+200=300 18test = Example() 19print(test.attr) 20 21# 代入 22test.attr = 500 23print(test.attr) 24
投稿2018/09/20 03:42
総合スコア1009
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。