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

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

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

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

Q&A

3回答

1445閲覧

Python メインメソッド、クラスの定義について

hAruP

総合スコア0

Python 3.x

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

0グッド

0クリップ

投稿2022/10/29 09:00

前提

PythonでJavaのようなメインクラス、メインメソッドを実装したいです。

実現したいこと

メインクラス内のメインメソッドで個々のメソッドを呼び出したいです。
(そもそもクラス、メインメソッドを定義している人が少ない気がします。Pythonは基本いらないのでしょうか。)

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

seiko_method1()  の行で警告がでます。

"seiko_method1" is not defined Pylance(reportUndefinedVariable)

該当のソースコード

Python

1# メインクラス 2class MainCls: 3 # 成功メソッド 4 def seiko_method1(): 5 print("成功") 6 7 # メインメソッド 8 def main(): 9 seiko_method1() # ←エラー"seiko_method1" is not defined Pylance(reportUndefinedVariable) 10 11 12 13# メインクラスインスタンス化 14main = MainCls 15# メインメソッド呼び出し 16main.main()

試したこと

メインクラスを明示的に定義「MainCls.seiko_method1()」すると実行できます。

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

Python 3.9.9

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

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

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

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

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

guest

回答3

0

プログラムの間違いは回答で指摘されている通りです。

Javaなどは、「プログラムの外から」メインクラスのメインメソッドが呼び出されるわけですが、PythonやRuby等はそうではないので、「メインクラスのオブジェクトを生成して、メインメソッドを呼び出す」というコードをトップレベルの所に明示的に書くことになり、やや不自然な気がします。

メインクラスを作るという目的だけのためにメインとなるクラスを作るのは意味が無いでしょう。

メインクラスを作るのでなく、トップレベルにmainという名前の関数を定義するのは割と見かけます。
トップレベルにそのままコードを書くと、そこで使う変数はグローバル変数になるのでそれを避けるためでしょうか。

Python

1~~~~ 2 3def main(): 4 ~~~~ 5 ~~~~ 6 7main()

投稿2022/10/29 10:26

otn

総合スコア86295

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

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

0

そもそもクラス、メインメソッドを定義している人が少ない気がします。Pythonは基本いらないのでしょうか。

はい。 Javaをご存知のようですが、Javaで必須となっているクラスでのプログラム構築は必須ではないし、実行時に最初に呼ばれるところのmainメソッドも不要です。

pythonはClass使える言語ということです。
プログラムはスクリプトファイル(=その内容が順に実行されるファイル)でできているので、任意の文/関数を任意の順に実行することができます。

投稿2022/10/29 09:41

TakaiY

総合スコア14324

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

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

0

コンストラクタ__init__()の第一引数に渡しているselfを利用して次のように書く必要があります.

Python3 Documentation Class Objects

Python

1class MainCls: 2 def __init__(self): 3 pass 4 5 def seiko_method1(self): 6 print("成功") 7 8 def main(self): 9 self.seiko_method1() 10 11main = MainCls() 12main.main()

コンストラクタは明示せずとも良いですが念の為.

投稿2022/10/29 09:13

編集2022/10/29 09:15
PondVillege

総合スコア1581

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問