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

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

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

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

Q&A

解決済

1回答

1543閲覧

godot engine クラスの継承とノードのタイプについて

blendegg

総合スコア81

Python

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

0グッド

0クリップ

投稿2019/05/09 23:49

###疑問
godot engine というゲームエンジンがあるのですが、ノードにはタイプがあって、このノードのタイプ自体がクラスだと思います。ノードというのは右側に追加してあるNode2Dというものです。
イメージ説明
このノードにスクリプトを書く歳に、extends クラス名 と書くことによって別のクラスを拡張するという仕様かと思います。
https://docs.godotengine.org/en/3.1/classes/class_node2d.html
node2dノードをツリーに追加し、スクリプト内のextends文によって上位のクラスを拡張するということですが、すでにNode2D<CanvasItem < Node < Objectというような継承関係にあるわけですから、拡張する意味はないはずです。Node2DはCanvasItem < Node < Objectの機能をすでに使えるはずです。

じゃあ拡張の意味はなんですしょうか?これが疑問です。
日本語情報が少ないので、憶測でもいいので教えてください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

node2dノードをツリーに追加し、スクリプト内のextends文によって上位のクラスを拡張するということですが、すでにNode2D<CanvasItem < Node < Objectというような継承関係にあるわけですから、拡張する意味はないはずです。

extends [クラス名]と書くことで、[クラス名]のクラスを拡張したクラスを作成する、ということです。
質問文の言葉を借りれば「上位クラス」に当たるのが[クラス名]です。
上位クラスという言葉は誤解を与えそうなので「親クラス」という言葉に置き換えます。
親クラスに当たるのが[クラス名]ですね。

この場合、親クラスである既存のNode2Dというクラスを拡張したクラスを作成するという意味になるはずです。

投稿2019/05/10 02:21

編集2019/05/10 03:27
dice142

総合スコア5158

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

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

blendegg

2019/05/10 03:21

Node2Dと書くことでnode2dクラスを拡張するという意味とのことですが、 node2dはすでに<CanvasItem < Node < Objectの下位に位置しているわけであり、Node2dノードを追加した時点で、これら親の機能は拡張せずとも使えるのではないですか? だとしたら何のためにextends node2dという拡張の宣言をするんでしょうか?
dice142

2019/05/10 03:31

上位下位だと齟齬が発生しそうなので親クラス子クラスという言葉を使います。 おっしゃる通りNode2Dは親クラスであるCanvasItem、ひいてはその親クラスであるNode、更にその親のObjectを使用できます。 しかし、継承(拡張)というのは親クラスの機能を使うことではありません。 Node2Dでは使えない機能を追加するために継承して拡張するのです。
blendegg

2019/05/10 04:13

回答ありがとうございます <CanvasItem < Node < Objectなどのクラスには含まれない機能を拡張するために、extendsの宣言をするということでしょうか しかし、子クラスをextendsするとエラーになります 基本的に親しかextendsできないようです ではなんのためにextendsがあるのでしょうか
dice142

2019/05/10 04:20

> <CanvasItem < Node < Objectなどのクラスには含まれない機能を拡張するために、extendsの宣言をするということでしょうか Node2Dの機能を使いたいが、Node2Dで使える機能だけでは足りない。 だからNode2Dを継承して拡張するのです。 Node2Dを継承するから「extends Node2D」と書きます。 > 子クラスをextendsするとエラーになります > 基本的に親しかextendsできないようです 子クラスを継承するという意味がわかりません。 継承先のクラスが子クラスになり、継承元のクラスが親クラスになるので、子クラスを継承するという言葉は継承の仕組みとしておかしいです。 > ではなんのためにextendsがあるのでしょうか 親クラスを拡張するためです。
blendegg

2019/05/10 07:32

node2dノードを追加した時点では、node2dクラスの機能しか使えない だから、node2dを継承して親クラスの機能も使えるようにする ということでしょうか。 しかし、extends文を何も書かないとエラーになるので、node2dを継承するのは強制ということでしょうかね それは仕様ということだと思いますが
dice142

2019/05/10 07:53

> node2dノードを追加した時点では、node2dクラスの機能しか使えない > だから、node2dを継承して親クラスの機能も使えるようにする > ということでしょうか。 大体あっていると思います。 この場合Node2Dクラスを拡張するので 親クラス=Node2D になりますね。 > しかし、extends文を何も書かないとエラーになるので、node2dを継承するのは強制ということでしょうかね > それは仕様ということだと思いますが godotの場合だと継承が必須のようです。 扱いたい機能のクラスを継承し、操作を記述するといったところでしょうか。
blendegg

2019/05/10 11:41

ありがとうございました ぼんやりわかってきました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問