質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

106閲覧

Pythonで、クラスAのインスタンスが作成されたかどうかを別のクラスBからクラスAのnewやinitを通さずに確認したい

karenDevice

総合スコア28

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2024/04/19 07:01

実現したいこと

例示コードのSecondクラスからFirstクラス(シングルトンパターンのクラス)のインスタンスが作成されていることを確認し、まだできてなければ例外としたい、Secondクラスのインスタンスが作成される前にFirstクラスのインスタンスが作成されていることを保証したいです。

発生している問題・分からないこと

SecondクラスからFirstクラスのインスタンスが作成されていることを確認しようとするとFirstクラスの__new__や__init__が呼び出されて結局インスタンスが作成されてしまいます。
(例示したコードでは伝わらないですがFirstクラスのインスタンス作成までにはいろいろと処理しており、SecondクラスからFirstクラスのインスタンスが作成できたから良いよね、という話ではありません。)

該当のソースコード

Python

1class First: 2 3 def __new__(cls): 4 5 if not hasattr(cls, "_instance"): 6 cls._instance = super(First, cls).__new__(cls) 7 print("Firstインスタンスが作成された。") 8 return cls._instance 9 10 @classmethod 11 def is_created_instance(cls) -> bool: 12 13 return hasattr(cls, "_instance") 14 15 16class Second: 17 18 def __init__(self) -> None: 19 if not First().is_created_instance(): 20 raise Exception("まだFirstのインスタンスは作成されていない。") 21 print("Secondインスタンスが作成された。") 22 23 24# 例外にしたいが。。。 25B = Second() 26A = First() 27

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

聞き方が悪いのかGoogleから得るものはありませんでした。
ChatGPT3.5でも聞きましたが私が書いたコードと同じものが帰ってきました。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

python

1 if not First().is_created_instance():

クラスメソッドですから、インスタンスを作成しないで呼びましょう。

python

1 if not First.is_created_instance():

投稿2024/04/19 07:16

int32_t

総合スコア20909

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

karenDevice

2024/04/19 07:24

うまくいきました。 class()だとインスタンスを作成してclassだとインスタンスを作成しないで呼べるんですね。 理解が足りてなかったです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問