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

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

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

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

Q&A

解決済

2回答

47115閲覧

Pythonで別クラスで定義をした関数をあるクラス呼び出す方法

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

2クリップ

投稿2017/05/28 04:10

Pythonでいくつかのclassを定義して、その中で数個の関数を定義しています。
やりたことは、すでに別class内で定義をした関数を現在定義をしているclass内で呼び出す方法です。

具体的には下記をご確認いただけますでしょうか。

====================================

class Sampel:
def AAA(x,y):
print("hello world to {} and {}".format(x,y)
return 0

class Sample2:
def BBB(x,y):
AAA(x,y) <-この中でAAAの関数を呼び出したいです

====================================

もしどのように表記をすれば良いかご存知の方がいましたら、ご教示いただけますでしょうか。

よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

やりたいことに単純に回答するなら以下のように使いたい関数のあるクラスのインスタンスを生成し、インスタンス.関数名(引数)で使用することができます。

python

1class Sampel: 2 def __init__(self): 3 pass 4 5 def AAA(x,y): 6 print("hello world to {} and {}".format(x,y) 7 return 0 8 9class Sample2: 10 def __init__(self): 11 pass 12 13 def BBB(x,y): 14 #AAA(x,y) <-この中でAAAの関数を呼び出したいです 15 sampel = Sampel()#Class Sampelのインスタンス作成 16 sampel.AAA(x,y) 17

これは質問とは関係ないですが、関数に必ず返り値が必要な訳ではありませんので、AAAの関数のreturn 0はなくても良いです。書くなら return True などがよろしいかと。
あと、クラスを書くときにはコンストラクタ(厳密にはコンストラクタではないですが)を記述しましょう。

python

1class Sampel: 2 3 def __init__(self,x,y): 4 self.x = x 5 self.y = y 6 7 def AAA(self): 8 print("hello world to {} and {}".format(self.x,self.y) 9 10 11if __name__ == '__main__': 12 sampel = Sampel(1,2) 13 sampel.AAA() 14

このような書き方が一般的です。また、勘違いされてしまうかもしれないので説明しますが、クラスに所属していない関数は例え同じファイルに記述されていてもインスタンス作成せずに呼び出すことができます。

python

1class Sampel: 2 3 def __init__(self,x,y): 4 self.x = x 5 self.y = y 6 7 def AAA(self): 8 print("hello world to {} and {}".format(self.x,self.y) 9 10def helloWorld(): 11 print("Hello World!") 12 13 14 15if __name__ == '__main__': 16 helloWorld() 17 sampel = Sampel(1,2) 18 sampel.AAA() 19

クラス関連についてまとめられたサイトはたくさんありますのでよく目を通しておくと良いですよ。

投稿2017/05/28 05:37

編集2017/05/28 06:15
_Victorique__

総合スコア1392

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

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

退会済みユーザー

退会済みユーザー

2017/05/28 07:53

他のクラスから関数を呼び出すときはクラス名.関数で呼び出せるのですね。ありがとうございます。 コンストラクタは今まで意識したことがありませんでした。 ネットで調べてみます! ありがとうございました。
_Victorique__

2017/05/28 08:13

クラス名ではなくインスタンス名です。 例えば、Testというクラスがあって、そのクラスの関数を使いたい場合は test = Test() インスタンス名 = クラス名() このようにインスタンスを作成し、関数を呼び出す際には test.printHelloWorld() インスタンス名.関数名() のように使います。 インスタンス名はクラス名に依存しませんので自分で自由に決めてください。
guest

0

他クラスのメソッドにアクセスするには クラス/インスタンス.メソッド名() とすればよいのですが、そもそも Python におけるクラスの基本知識が不足しているように思えます。

クラス内のメソッドには インスタンスメソッド・クラスメソッド・スタティックメソッド という種類がありますが、Sampel.AAA および Sample2.BBB はそれらのどのルールにも合致していません。

公式リファレンスや、Qiita などで各種解説記事を一読することをおすすめします。

さいごに、Sampel.AAA をクラスメソッド、Sample2.BBB をインスタンスメソッドで定義した場合のサンプルを示します。

python

1class Sampel(object): 2 @classmethod 3 def AAA(cls, x, y): 4 """これは Sampel のクラスメソッドです.""" 5 print("hello world to {} and {}".format(x, y)) 6 7 8class Sample2(object): 9 def BBB(self, x, y): 10 """これは Sample2 のインスタンスメソッドです.""" 11 Sampel.AAA(x, y) # Sampel.AAA はクラスメソッドなのでインスタンス化せず直接呼び出せます 12 13 14if __name__ == '__main__': 15 abc = Sample2() # Sample2 のインスタンスを生成します 16 abc.BBB('Tom', 'Alice') # Sample2 の BBBメソッドを呼び出します 17 18# 実行結果: hello world to Tom and Alice

クラスの概念は奥が深いので、個人的にもう少し慣れてから使い始めてもいいのでは?と思いました。

投稿2017/05/28 04:37

編集2017/05/28 04:44
miyahan

総合スコア3095

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問