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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3908閲覧

メソッドの引数一覧を取得する

TakamiChie

総合スコア59

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2020/09/01 13:05

前提・実現したいこと

クラス名とプロパティのリストからプロパティをオブジェクトを生成しようと考えています。

プロパティの中には一部コンストラクタでしか設定できない値も含まれているため、まずはコンストラクタの引数リストを取得したいと考えています。

tkinter.Labelクラスであれば、このあたりのことです。

python

1 def __init__( 2 self, 3 master: Optional[Misc] = ..., 4 cnf: Optional[Dict[str, Any]] = ..., 5 *, 6 activebackground: _Color = ..., 7 activeforeground: _Color = ..., 8 anchor: _Anchor = ..., 9 background: _Color = ..., 10 bd: _ScreenUnits = ..., 11 bg: _Color = ..., 12 bitmap: _Bitmap = ..., 13 border: _ScreenUnits = ..., 14 borderwidth: _ScreenUnits = ..., 15 compound: _Compound = ..., 16 cursor: _Cursor = ..., 17 disabledforeground: _Color = ..., 18 fg: _Color = ..., 19 font: _FontDescription = ..., 20 foreground: _Color = ..., 21 height: _ScreenUnits = ..., 22 highlightbackground: _Color = ..., 23 highlightcolor: _Color = ..., 24 highlightthickness: _ScreenUnits = ..., 25 image: _ImageSpec = ..., 26 justify: Literal["left", "center", "right"] = ..., 27 padx: _ScreenUnits = ..., 28 pady: _ScreenUnits = ..., 29 relief: _Relief = ..., 30 state: Literal["normal", "active", "disabled"] = ..., 31 takefocus: _TakeFocusValue = ..., 32 text: str = ..., 33 textvariable: Variable = ..., 34 underline: int = ..., 35 width: _ScreenUnits = ..., 36 wraplength: _ScreenUnits = ..., 37 ) -> None: ...

発生している問題・エラーメッセージ

引数リストを取得するためには、inspectorモジュールのinspect.signature()メソッドを使用するという記事を読み、以下のようにコードを書いてみましたが、引数リストが得られません。

python

1import pprint 2import inspect 3 4pprint(inspect.signature(tkinter.Label)) 5# => <Signature (master=None, cnf={}, **kw)>

試したこと

  • pprint(tkinter.Label.__init__.__dict__) => {}
  • pprint(inspect.getmembers(tkinter.Label.__init__)) => tkinter.Labelのキーワードリストは得られるものの、コンストラクタの引数リストは無し
  • pprint(tkinter.Label.__init__.__dir__()) => コンストラクタの引数リストは得られず
  • pprint(inspect.signature(tkinter.Label.__init__).parameters.values()) => 内容的にはpprint(inspect.signature(tkinter.Label))と変化無し

補足情報(FW/ツールのバージョンなど)

  • Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
  • Windows 10 Pro Ver 2004 Build 19041.450

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

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

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

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

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

guest

回答1

0

ベストアンサー

引数形式はそれであってますよ。
tkinterのソースコードにそう書いてあります。
可変長キーワード引数 kw にすべて引き渡されます。

/usr/lib/python3.6/tkinter/__init__.py:

python

1class Label(Widget): 2 """Label widget which can display text and bitmaps.""" 3 def __init__(self, master=None, cnf={}, **kw): 4 """Construct a horizontal LabeledScale with parent master, a 5 variable to be associated with the Ttk Scale widget and its range. 6 If variable is not specified, a tkinter.IntVar is created. 7 8 WIDGET-SPECIFIC OPTIONS 9 10 compound: 'top' or 'bottom' 11 Specifies how to display the label relative to the scale. 12 Defaults to 'top'. 13 """

投稿2020/09/01 14:47

編集2020/09/01 14:51
shiracamus

総合スコア5406

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

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

TakamiChie

2020/09/01 16:38 編集

ありがとうございます。"\Lib\tkinter\__init__.py" と ".vscode\extensions\ms-python.vscode-pylance-2020.8.3\server\typeshed-fallback\stdlib\3\tkinter\__init__.pyi" が大きく異なることに気付いていませんでした。 それ以外の引数リスト(activebackgroundやanchor、textなど)を取得することはできないのでしょうか? Visual Studio CodeのPython言語サーバ(PyLance)などだと、Label(と入力した時点でコード補完にそれぞれの引数リストが表示されています。 これは、それぞれの__doc__のWIDGET-SPECIFIC OPTIONSなどの行を独自にパースしているだけなのでしょうか?
shiracamus

2020/09/01 16:59

ライブラリオブジェクトをinspectする限り、個々の引数リストを取り出すことはできないでしょう。 エディタ補完用オブジェクトからなら個別の引数リストを取り出せるでしょう。
TakamiChie

2020/09/06 07:42

なるほどありがとうございます。 エディタ補完用のオブジェクトを使ってしまうと他の環境で動くかどうか分かりませんので、必要に応じてコメントから読むようにします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問