質問: UG('Billy Beaver', 1984) #UG型のオブジェクト(書き方により__init__に行く?)が結び付けられている print(p5, 'is a graduate student is', type(p5)==Grad) print(p5, 'is an undergraduate student is', type(p5)==UG) def isStudent(self): return isinstance(self, Student) #instance(引数1, 引数2) #1番目の引数が2番目の引数で示された方の #インスタンスであるときTrue print(p5, 'is a student is', p5.isStudent()) #instance(p5, Student) , selfにはp5自身が入る print(p6, 'is a student is', p6.isStudent()) #p6が結び付けられているオブジェクトはUG型 #ただし、UGはStudentのサブクラスであるので #クラスStudentのインスタンスであるともみなされる。 print(p3, 'is a student is', p3.isStudent()) ``` ### 試したこと '#'を用いて3つの行、全て独立に実行してみたのですが3つの行ともどれもエラーを吐き出してしまいました。
回答: isStudentのインデントレベルが浅いせいで、一般の関数だと思われています。 ``` class Grad(Student): # これはメソッド def isStudent(self): ... ``` ``` class Grad(Student): ... # これは関数 def isStudent(self): ... ``` もちろん間にあるスクリプトコードは適切な位置に移動してやる必要があります。 > > 関数isinstanceでエラーが出てしまいます。 > > > エラーメッセージを読むと、本当の原因が分かります。 > > AttributeError: 'Grad' object has no attribute 'isStudent' > > > isinstanceの使い方に直接起因するエラーではありません。 isStudentがGradに結び付いていない(attributeではない)ことが問題なのです。