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

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

新規登録して質問してみよう
ただいま回答率
85.35%
オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Python

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

Q&A

解決済

2回答

2405閲覧

【Python】オブジェクト指向「object has no attribute」

OHASI

総合スコア97

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Python

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

0グッド

0クリップ

投稿2022/01/11 00:27

###前提
学校の課題をやっているのですが、途中でいきずまっています。
エラー文は「getFirstNameがないですよ」って意味だと思うのですが、ProfileオブジェクトにgetFirstNameって書いているのになぜ、このようなエラー文が出るのですか?また、どうすればこのエラーを解決できますか?

###課題
氏名と氏名から生成されるイニシャルを格納するProfileクラスの設計を目指す。

イニシャル生成処理の実装と内部データに直接アクセスさせないようデータの秘匿を行い、クラスの設計を完成させよ。

その際以下の条件を守ること
0. クラスが持つ属性はすべてprivateな属性とすること
0. 性・名のデータからイニシャルを生成するprivateなメソット__setInitial()を実装すること
0. イニシャルの文字列は「( First Name の最初の文字 ) . ( Last Name の最初の文字 ) . 」の4文字で構成すること
0. 後半のコードのinput()では半角文字が入力される想定で、エラー処理は考慮しなくてよい
0. setName()を経由してインスタンスに渡された性・名のデータに対し、Last Nameは全て大文字に、First Nameは先頭のみ大文字にして、各インスタンス変数に格納する処理を追加する

###エラー

Traceback (most recent call last): File "-----.py", line 54, in <module> print('設定された名前の出力:', x.getFirstName(), x.getLastName(), x.getInitial()) AttributeError: 'Profile' object has no attribute 'getFirstName'

###自分で書いたコード

python

1class Profile(object): 2 def __init__(self): 3 self.firstName = 'fiestName' 4 self.lastName = 'lastName' 5 self.initial = 'initial' 6 7 def __getFirstName(self,fn): 8 a= fn 9 a = a.capitalize() #1文字目を大文字にする 10 self.firstName = a 11 return self.firstName 12 13 def __getLastName(self,ln): 14 b = ln 15 b = b.upper() #大文字にする 16 self.lastName = b 17 return self.lastName 18 19 def __getInitial(self): 20 return self.initial 21 22 def __setInitial(self,first,last): 23 c = first + '.' + last + '.' 24 self.initial = c 25 return self.initial 26 27 def setName(self,fn,ln): 28 self.__getFirstName(fn) 29 self.__getLastName(ln) 30 31 #文字型にする 32 first = str(fn) 33 last = str(ln) 34 35 #最初の文字を取得 36 first = first[0] 37 last = last[0] 38 #大文字にする 39 first = first.upper() 40 last = last.upper() 41 self.__setInitial(first,last) 42 return 43 44x = Profile() 45print('First Nameを入力(小文字)') 46fn = input() 47print('Last Nameを入力(小文字)') 48ln = input() 49 50x.setName(fn,ln) 51 52print('設定された名前の出力:', x.getFirstName(), x.getLastName(), x.getInitial()) 53 54

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

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

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

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

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

guest

回答2

0

ベストアンサー

ProfileオブジェクトにgetFirstNameって書いているのになぜ、このようなエラー文が出るのですか?

定義されているのは __getFirstName(self,fn) であり、getFirstName(self) ではありません。

投稿2022/01/11 00:55

episteme

総合スコア16612

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

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

0

  • ProfileオブジェクトにgetFirstNameって書いているのになぜ、このようなエラー文が出るのですか?

getFirstNameというメソッドが定義されていないからです。

理由がわからないなら、公式ドキュメント Python チュートリアル 9.6. プライベート変数を読んでください。
それでわからないなら、公式ドキュメント Python チュートリアル 9. クラスの全体を読んでください。

投稿2022/01/11 00:49

ppaul

総合スコア24670

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問