をインスタンス化せずに、私はコンストラクタを持つクラスを定義したと仮定します。パイソン - リターンコンストラクタ引数名
class Person:
def __init__(self, name="", age=0):
self.__name = name
self.__age = age
今私はPerson
のインスタンスを作るのが好き、私は、私は、コンストラクタに渡すべきかを忘れてしまったと仮定します。 私はデフォルト引数を定義しているので、私は新しいPerson
を行うことができるように、私は、この時間は、適切な名前と年齢を渡し、引数が何であるかを見てみましょうされます
dummy_person = Person()
print dummy_person.__init__.__code__.co_varnames
を行うことができます。
質問は:どのように私はdummy_person
最初のインスタンスを作成しなくても同様の結果を達成することができますか?つまり、クラス名を知るだけでコンストラクタの引数リストにアクセスできますか?
編集は:ここで私はこの機能を使用することを計画しています方法です。これが機能するために
args_names = CircleTrajectory.__init__.__code__.co_varnames[1:]
args = {}
for arg_name in args_names:
args.append(float(input("Insert " + arg_name + ": ")))
my_circle = CircleTrajectory(*args)
は、我々は
CircleTrajectory
クラスが定義されている必要があり、我々はそのコンストラクタのすべてのパラメータが浮動小数点数であることを前提とする必要があります。最後の前提は私にはあまり魅力がありませんが、GUIに値を入力することでこれらのオブジェクトを最終的なユーザーが作成する必要があるため、安全だと思います。
を使用することができます1つの混乱した解決策のようです。これが影響する完全なユースケースを共有できますか? –
あなたはユーザー入力からインスタンスを作成したい場合は、そのロジックは、(これは修辞的な質問です。答えはイエスである)クラス自体の一部ではないでしょうか?特にあなたが外部から要求された入力の種類を見分けることができないだろうことを考えると、( '' my_circle = CircleTrajectory.from_input())は、クラスメソッド作るのではなく、イントロスペクションの周りfaffing考えてみましょう。 – jonrsharpe
さて、あなたはそれを言いました、確かに!それは実際にはここで全く新しい可能性の世界を開きます。私はまだ疑いが少しあります: 'from_input'メソッドは' @ classmethod'ですか、内部のコンストラクタを呼びますか? – Antonio