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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

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

Q&A

解決済

2回答

2958閲覧

同じクラス内にあるメソッドから違うメソッドを呼び出したい

BuhKeil

総合スコア34

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

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

0グッド

0クリップ

投稿2021/04/07 04:14

やりたいこと

一つのクラス内にあるメソッド内で、別メソッドを呼び出したいのですが、できません。どのような記述をすれば良いのでしょうか。

環境

  • Windows10
  • Python v3.8.6

コード

Python3

1import datetime 2 3class Component(): 4 def __init__(self): 5 pass 6 def MakeTimeSerial(self,string): 7 date_string, time_string = string.split("-") 8 year,month,day = date_string.split("/") 9 hour,minute,second = time_string.split(":") 10 d = datetime(int(year),int(month),int(day),int(hour),int(minute),int(second)) 11 return int(time.mktime(d.timetuple()) 12 13 def Output(self): 14 val = "2021/3/4-23:34:21" 15 res = Component.MakeTimeSerial(val) 16 return res 17 18test = Component() 19print(test.Output())

出力されるエラー

TypeError : MakeTimeSerial() missing 1 required positional argument: 'string'

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

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

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

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

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

guest

回答2

0

ベストアンサー

python

1res = self.MakeTimeSerial(val)

--
メソッド MakeTimeSerial は、定義を見るとインスタンスメソッドになっていて、呼び出しを見るとクラスメソッドになっているから動きません。

回答は、定義に合せてインスタンスメソッドとして呼んでいます。

ただ、MakeTimeSerial を見ると、インスタンス変数にアクセスしていないので、クラスメソッドとして定義しなおせば、元の呼び出し方でも動くようになります。

インスタンスメソッドとクラスメソッドの定義のしかたや使いかたについてはリファレンスなどのドキュメントを参照ください。

投稿2021/04/07 04:35

編集2021/04/07 08:17
TakaiY

総合スコア12765

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

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

BuhKeil

2021/04/07 04:44

ありがとうございました。
TakaiY

2021/04/07 08:13

ちょっと追記します。
BuhKeil

2021/04/13 07:41

遅くなりました。ありがとうございました。
guest

0

~~res = Component.MakeTimeSerial(self, val)~~として、他にもエラーあったので修正してみました。下記でいかがでしょうか。

python3

1from datetime import datetime #修正 2import time #修正 3 4class Component(): 5 def __init__(self): 6 pass 7 def MakeTimeSerial(self,string): 8 date_string, time_string = string.split("-") 9 year,month,day = date_string.split("/") 10 hour,minute,second = time_string.split(":") 11 d = datetime(int(year),int(month),int(day),int(hour),int(minute),int(second)) 12 return int(time.mktime(d.timetuple())) #修正 13 14 def Output(self): 15 val = "2021/3/4-23:34:21" 16 res = Component.MakeTimeSerial(self, val) #修正 17 return res 18 19test = Component() 20print(test.Output()) 21# 1614868461

投稿2021/04/07 04:43

編集2021/04/07 05:45
jeanbiego

総合スコア3966

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

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

BuhKeil

2021/04/07 05:14

コメントありがとうございます。 from datetime import datetimeの行、 import time の行、 return int ....の行は、私の記述ミスです。ご指摘ありがとうございます。 質問があります。先にご指摘頂いたTakaiYさまの res = self.MakeTimeSerial(val)という記述と、 jeanbiegoさまの res = Component.MakeTimeSerial(self, val) との記述はどちらも正しいのでしょうか?
jeanbiego

2021/04/07 05:46

いや、なんかうっかりしてました。私の回答は誤りですので気になさらないでください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問