Pythonでstaticメソッドを呼び出す
2023-09-30 10:22:11
質問
私は、クラス
Person
という名前の静的メソッドがあります。
call_person
:
class Person:
def call_person():
print "hello person"
PythonコンソールでPersonクラスをインポートし、以下のように呼び出します。
Person.call_person()
. しかし、それは私に次のようなエラーを与えています。
'module' object has no attribute 'call_person'
. なぜこのようなエラーが発生するのか、どなたか教えていただけませんか?
どのように解決するのですか?
のようにする必要があります。
class Person:
@staticmethod
def call_person():
print "hello person"
# Calling static methods works on classes as well as instances of that class
Person.call_person() # calling on class
p = Person()
p.call_person() # calling on instance of class
やりたいことによっては、classmethodの方が適切かもしれません。
class Person:
@classmethod
def call_person(cls):
print "hello person",cls
p = Person().call_person() # using classmethod on instance
Person.call_person() # using classmethod on class
ここでの違いは、2番目の例ではクラス自体がメソッドの最初の引数として渡されることです(インスタンスが最初の引数である通常のメソッドや、追加の引数を受け取らないstaticmethodとは対照的です)。
さて、実際の質問にお答えしましょう。 私は、あなたがメソッドを見つけられないのは、あなたがクラス
Person
をモジュール
Person.py
.
では
import Person # Person class is available as Person.Person
Person.Person.call_person() # this should work
Person.Person().call_person() # this should work as well
あるいは、モジュールPersonからクラスPersonをインポートするのもよいでしょう。
from Person import Person
Person.call_person()
これは、何がモジュールで何がクラスなのか、少し混乱します。 一般的に、私はクラスが住んでいるモジュールと同じ名前を与えることを避けようとします。 しかし、これはどうやらあまり見過ごされていないようで
datetime
モジュールには、標準ライブラリの
datetime
クラスがあります。
最後に、指摘すべきは、あなたが は必要ありません。 は必要ないということです。
# Person.py
def call_person():
print "Hello person"
今度は別のファイルで、それをインポートします。
import Person
Person.call_person() # 'Hello person'
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonの静的メソッド?
-
[解決済み] データフレームをソートした後にインデックスを更新する
-
[解決済み] PythonからSMTPを使用してメールを送信する
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] PythonのRequestsモジュールを使ってWebサイトに "ログイン "するには?
-
[解決済み] Django filter queryset __in for *every* item in list