2017-12-12 4 views
-1

name,surnameおよびageの属性を持つPersonという名前のクラスを定義する必要があるこの割り当てがあります。私はゲッターとセッターメソッドを行った。今私は演算子のオーバーロードに問題があります。 まず、印刷演算子をオーバーロードする必要があります(これは私が行っています)。__lt__と印刷オペレータのオーバーロード

TypeError: '<' not supported between instances of 'Person' and 'Person' 

そして、最後のステップで、私は別の人物などの年代を比較する必要があります:

Sabine=Person("Sabine","Musterfrau",17) 
Anton_Junior=Person("Anton","Mueller",14) 
print(Sabine < Anton_Junior) should return false and vice versa 

私の第二に、私は私に次のエラーを与えるオペレータ「未満を」オーバーロードする必要があります問題は次のとおりです。1.タイプエラー。2.すでに印刷方法がオーバーロードされていて、後でデフォルトのprint()を使用したいと思っています。

はここに私のコードです:

from sys import stdout 
class Person: 
    def __init__(self,vorname,nachname,alter): 
     self.vorname=vorname 
     self.nachname=nachname 
     self._alter=alter 
    def get_Alter(self): 
      return self._alter 
    def set_Alter(self,alter2): 
     self._alter=alter2 
    def print(person): 
     stdout.write("Name:"+person.vorname+" Nachname:"+person.nachname+" Alter:"+str(person._alter)+"\n") 
    def __lt__(self,other): 
     return self._alter() < other._alter() 

Sabine=Person("Sabine","Musterfrau",17) 
Sabine.set_Alter(18) 
Anton_Junior=Person("Anton","Mueller",14) 
Anton_Senior=Person("Anton","Mueller",80) 
print(Sabine < Anton_Junior) 
print(Sabine) 

[OK]を、終了したばかりの私の仕事、あなたのすべてに感謝!

+1

このコードは、あなたが主張しているエラーを意味するものではありません。これはTypeErrorを返しますが、何らかの理由であなたの '__lt__'メソッド内で' _alter'オブジェクトを呼び出すため、メッセージ '' int ''オブジェクトは呼び出し可能ではありません。 –

+0

PythonはJavaではありません。簡単な属性アクセスのためにgetterとsetterは使用しません。 Pythonでgettersとsetterが本当に必要な場合は、[descriptor protocol](https://docs.python.org/3/howto/descriptor.html)を使用して、呼び出し元が単純な属性を使用してgetterおよびsetterメソッドにアクセスできるようにします構文。 –

+0

あなたの助けを借りて今すぐ修正しました。 –

答えて

2

まず、self._alterはフィールド/プロパティ/値(名前は任意です)であり、メソッドではありません。これはあなたを助ける必要があります。

def __lt__(self,other): 
     return self._alter < other._alter 

それは第二の問題になると::

I have already overloaded print method and they want me to use the default print() later.

Refefine __str__()方法。

>>> class MyClass: 
... def __str__(self): 
...  return 'This is my class' 
... 
>>> mc = MyClass() 
>>> print(mc) 
This is my class 
関連する問題