🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

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

Q&A

解決済

3回答

1089閲覧

pythonでメソッド名などを動的に変える方法について

babbleman

総合スコア107

Python 3.x

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

0グッド

0クリップ

投稿2021/02/24 03:19

pythonでAPIを使用する際に以下のような構文を使っています。

python

1x.TestTable.create("****")

この"TestTable"というものはデータベースのテーブル名のようなもので、そこにレコードを追加しているのですが、
このテーブル名を動的に変更することは可能でしょうか?
調べたところAPIを使って追加する構文はこれしか見つけられなかったので、この構文を使うとして動的に変更する方法がありましたら教えて頂きたいです。

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

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

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

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

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

y_waiwai

2021/02/24 03:28

具体的なコードを提示しましょう それでは意味不明です
ppaul

2021/02/24 05:15

一つのメソッド名についてそれが実行することを動的に変えたいという話なのか、同じ処理を行うメソッドの名前を動的に変えたいというのか、どちらなのでしょうか?
TakaiY

2021/02/24 09:24

他の方の質問のとおりですが特に、「この"TestTable"というものはデータベースの『テーブル名』のようなもの」というところが、普通の認識とは異なります。通常、TestTableは変数(クラス変数)名ですので、それがデータベースのテーブル名になっているとは考えにくいです。その構文であれば、"****"の部分がテーブル名になるのが普通です。
babbleman

2021/02/25 08:30

ありがとうございます。 特殊なAPIとなっており、テーブル名がこのように.のあとにくる構文となっています。
ppaul

2021/02/25 09:46

xのクラスは何ですか。 xをどうやって作っていますか。というのでもかまいません。
guest

回答3

0

ベストアンサー

以下の例ではxのクラスはわからないのでとりあえずXという名前にしてあります。
この例を参考にしてやってみてください。

python

1>>> class Table: 2... name = 'Table' 3... def create(self, tbl): 4... print(f'My name is {self.name}: argument is {tbl}') 5... 6>>> class Tavle2(Table): 7... name = 'Table2' 8... 9>>> class AnotherTable: 10... name = 'AnotherTable' 11... def create(self, tbl): 12... print(f'My name is {self.name}: argument is {tbl}????') 13... 14>>> class X: 15... TestTable = Table() 16... 17>>> x = X() 18>>> x.TestTable.create("abc") 19My name is Table: argument is abc 20>>> 21>>> type(x).TestTable = Tavle2() 22>>> x.TestTable.create("def") 23My name is Table2: argument is def 24>>> 25>>> type(x).TestTable = AnotherTable() 26>>> x.TestTable.create("ghi") 27My name is AnotherTable: argument is ghi????

投稿2021/02/25 11:29

編集2021/02/25 11:30
ppaul

総合スコア24670

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

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

0

質問の回答のとおり「特殊なAPIとなっており、テーブル名がこのように.のあとにくる構文となっています。」ということ、ようするに、TestTable というテーブルだけ扱うようなAPIなのであれば、違うテーブル名にする方法は無いと思います。
あったとしても、通常のインターフェースではないので、そのAPIの作成元に問い合わせるしかないでしょう。

ちなみに、処理としては、「x.TestTable」という記述の、TestTableはテーブル名を表しているのでなく、テーブル名と同じ変数/オブジェクトを表わしていますので、利用する側がここを変更することで、違うテーブルにアクセスできるというような作りはできないのが普通です。

投稿2021/02/25 09:28

TakaiY

総合スコア13773

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

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

0

以下のような事がやりたいという事であっていますでしょうか?
x.TestTable.create("****")x.HogeTable.create("****") が行われます。

python

1table_list = ["TestTable", "HogeTable"] 2 3for table_name in table_list: 4 getattr(x, name).create("****")

異なる場合もう少し具体的に記載して頂けると良い回答が得られるかと思います。

投稿2021/02/24 04:43

編集2021/02/24 04:45
yamap55

総合スコア1376

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問