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

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

ただいまの
回答率

88.05%

AttributeError: Secretary instance has no attribute

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,434

score 180

お世話になります。下記のコードを記述して学習していますが
AttributeErrorが出ます
原因がわかりません。
class Secretary:
def init(self):
self.appointment = {}

def request_appointment(self, when, who):
if(when in self.appointment):
return False
else:
self.appointment[when] = who
return True

def get_schedule(self):
return str(self.appointment)
from secretary import *

class Manager:
def init(self):
self.sara = Secretary()

def check_schedule(self):
schedule = self.sara.get_schedule()
print(schedule)

def get_secretary(self):
return self.sara

class Client:
def init(self, name):
self.name = name
self.contact_point = None

def set_contact_point(self, contact_point):
self.contact_point = contact_point

def make_appointment(self, when):
if(self.contact_point):
is_success = self.contact_point.request_appointment(when, self.name)
print(self.name + " could book? : " + str(is_success))

bob = Manager()

adam = Client('adam')
adam.set_contact_point(bob.get_secretary())
adam.make_appointment('10:30')

charles = Client('charles')
charles.set_contact_point(bob.get_secretary())
charles.make_appointment('11:30')

dag = Client('dag')
dag.set_contact_point(bob.get_secretary())
dag.make_appointment('10:30')

bob.check_schedule()

*************************
エラー内容↓↓↓↓↓↓↓
Traceback (most recent call last):
File "C:/Python27/2016_8.5.py", line 45, in <module>
adam.make_appointment('10:30')
File "C:/Python27/2016_8.5.py", line 38, in make_appointment
is_success = self.contact_point.request_appointment(when, self.name)
AttributeError: Secretary instance has no attribute 'request_appointment'

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • issei.

    2016/08/05 15:15

    ソースコードを、コードタグ(バックスラッシュ3つ)で囲んで欲しいです。

    キャンセル

  • attakei

    2016/08/05 15:59

    記載されているのは単一のコードでしょうか?

    途中に`from secretary import *`というコードが挟まれていますが、この中で定義されているクラスなどが別にあれば、そちらも提示していただけると回答につながりやすいかと思います。
    (自環境でfromの部分を切ったらエラーが出なかったので、その辺が原因な気がします)

    キャンセル

  • Casablanca_mtg

    2016/08/05 15:59

    すみませんコードタグで囲むやり方がいまいちわかりません
    1.http://www.hcn.zaq.ne.jp/cabnw708/pic/2016_8.5-1.PNG
    2.http://www.hcn.zaq.ne.jp/cabnw708/pic/2016_8.5-2.PNG
    これだったらわかりやすいと思います。
    この部分はhttp://news.mynavi.jp/series/python/022/マイナビ第22章です
    AttributeError:という意味がよく理解できていません。属性エラーということですね。よろしくお願いいたします。jupyterでやってみましたところ”from secretary import *”がひかかりました。

    キャンセル

  • Casablanca_mtg

    2016/08/07 16:58

    こちらもご参考ください
    http://www.hcn.zaq.ne.jp/cabnw708/pic/error_sample.py
    原因がわかりません。よろしくお願いいたします

    キャンセル

回答 1

checkベストアンサー

0

リンクで提示されたソースなどを眺めたうえで、試しにfrom secretary import *を無視して進めてみると、やはりうまくいきました。

となると、現時点のsecretary.pyに問題がある可能性が高いです。
この章でSecretaryクラスの定義について3箇所コードがありますが、現在のコードはどれになるでしょうか。
上記のClient,Manager各クラスの動きを実際に動作させるには、一番最後に記載されているrequest_appointmentが定義されているSecretaryクラスが必要になるので、secretary.pyを編集して、書き換えてあげれば動きはするかと思います。

 ここから追記

class Secretary:
    def __init__(self):
        self.appointment = {}

    def request_appointment(self, when, who):
        if(when in self.appointment):
            return False
        else:
            self.appointment[when] = who
            return True

    def get_schedule(self):
        return str(self.appointment)

マイナビのサイトにあるコードをそのままコピペしました。
secretary.pyの中身をこれに差し替えれば、質問の課題自体は解消されると思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/08 09:36

    お世話になります。このマイナビでいくつものコードを書いて最後につないでいる、過程の説明はこう書き替えることによっての説明はわかりますが最後のコードへの持って行き方が初心者には理解できません。{上記のClient,Manager各クラスの動きを実際に動作させるには、一番最後に記載されているrequest_appointmentが定義されているSecretaryクラスが必要になるので、secretary.pyを編集して、書き換えてあげれば動きはするかと思います。}この中ではManager:bob及びSecretary:saraがj必要とされているわけですからこれらをClassで定義してから実行しないとis not definedが返されるのですね。
    落ち着いてやってみます。申し訳ないですが”ecretary.pyを編集して、書き換えてあげれば動きはする”部分を具体的にご指導ください。よろしくお願いいたします。

    キャンセル

  • 2016/08/08 15:20

    ありがとうございます。できました。secretary.pyをf5で保存してfrom secretary import *を外して実行したらうまくいきました。secretary.pyを保存しないで続けてコードを記述してはできないのでしょうか?そのあたりがまだよくわかっていませんがご指導感謝いたします。明日から23章に進みます。

    キャンセル

  • 2016/08/08 16:05

    F5で保存しなくってもうまくいきました。なぜfrom secretary import *を記載されているのか?これが邪魔をしていたのですね。ありがとうございました。おかげさまで次に進めます。

    キャンセル

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

  • ただいまの回答率 88.05%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る