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

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

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

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Python 3.x

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

Q&A

解決済

2回答

262閲覧

pythonのクラスの書き方について

退会済みユーザー

退会済みユーザー

総合スコア0

Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Python 3.x

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

0グッド

0クリップ

投稿2018/08/28 03:51

pythonのクラスの書き方についてです。
某サイトを参考にしながらRPGを作っています。
そこで、タイトル画面に関するクラスを作ってみたのですが、エラーが出てしまいます。
書いたものがこれで

python

1class Title: 2 """タイトル画面""" 3 START, CONTINUE, EXIT = 0, 1, 2 4 def __init__(self): 5 self.myfont = pygame.font.Font('ipag.ttf',40) 6 self.title_img = load_image("data", "python_quest.png", -1) 7 self.cursor_img = load_image("data", "cursor2.png", -1) 8 self.menu = self.START 9 def moji(self): 10 self.moji1 = self.myfont.render('START',True,(0,0,0)) 11 self.moji2 = self.myfont.render('CONTINUE',True,(0,0,0)) 12 self.moji3 = self.myfont.render('EXIT',True,(0,0,0)) 13 14 def update(self): 15 pass 16 def draw(self, screen): 17 screen.fill((0,0,128)) 18 # タイトルの描画 19 screen.blit(self.title_img, (20,60)) 20 # メニューの描画 21 screen.blit(self.moji1,(260,240)) 22 screen.blit(self.moji2,(260,280)) 23 screen.blit(self.moji3,(260,320)) 24 25 # メニューカーソルの描画 26 if self.menu == self.START: 27 screen.blit(self.cursor_img, (240, 240)) 28 elif self.menu == self.CONTINUE: 29 screen.blit(self.cursor_img, (240, 280)) 30 elif self.menu == self.EXIT: 31 screen.blit(self.cursor_img, (240, 320))

エラーコードがこれです。

AttributeError: 'Title' object has no attribute 'moji1'

恐らく他のmoji2やmoji3でも同様のエラーが出ると思います。

実行しようとしているのは

  • フォントファイルの読み込み
  • それによるタイトルの文字の作成

です。

クラスのシステムを理解しきれていないため、おかしな構成になっていると思います。
このエラーの対処法を教えていただけるとありがたいです。
回答よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

moji()__init__()の中に入れればひとまず動くとは思います。

class Title: """タイトル画面""" START, CONTINUE, EXIT = 0, 1, 2 def __init__(self): self.myfont = pygame.font.Font('ipag.ttf',40) self.title_img = load_image("data", "python_quest.png", -1) self.cursor_img = load_image("data", "cursor2.png", -1) self.menu = self.START self.moji1 = self.myfont.render('START',True,(0,0,0)) self.moji2 = self.myfont.render('CONTINUE',True,(0,0,0)) self.moji3 = self.myfont.render('EXIT',True,(0,0,0)) ...

投稿2018/08/28 04:00

tachikoma

総合スコア3601

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

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

tachikoma

2018/08/28 04:09 編集

問題はmoji()を呼び出すdraw()を呼び出してしまったことだと思います。
退会済みユーザー

退会済みユーザー

2018/08/28 04:23

回答ありがとうございます。 何とかこの部分のエラーはなくせそうです。 助かりました。
guest

0

selfで変数を生成するときは__init__(self) 内で定義するのではないでしょうか。
その他の関数で、アクセスすることは出来ても定義は出来ないと思います。
参考サイト

投稿2018/08/28 04:00

oroshitaruuuuu

総合スコア25

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

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

tachikoma

2018/08/28 04:02

Pythonは動的に属性を追加できます。
退会済みユーザー

退会済みユーザー

2018/08/28 04:24

回答ありがとうございました。 サイトも参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問