カスタム クラスで作成されたインスタンスが組み込みオブジェクトと同様に組み込み関数の操作を実行できるように、カスタム クラスに対応するメソッドを追加します。これが関数の書き換えです。
オブジェクトから文字列関数へ: repr(obj)、このオブジェクトを表すことができる式文字列を返します。通常は eval(repr(obj)) == obj (この文字列は通常、実行に使用される Python によって解釈および実行されます)プログラマ)、str(obj) は指定されたオブジェクトを通じて文字列を返します (この文字列は通常人間によって読み取られます)。
オブジェクトの文字列関数への書き換えメソッド:
repr(obj) 関数の書き換えメソッド:
def __repr__(self):
str(obj) 関数の書き換え方法:
def __str__(self):
手順:
1. str(obj) 関数は、最初に obj を検索します。__str__() メソッド、このメソッドを呼び出し、結果
2 を返します。obj.__str__() メソッドがない場合は、obj.__repr__() メソッドの結果を返し、
3 を返します。 obj.__repr__ メソッドが存在しない場合、オブジェクト クラスの __repr__ インスタンス メソッドを呼び出すと、<__main__.XXXX object at 0xAABBCCDD>
例:## の形式で文字列が表示されます。 #
# 此示例示意通过重写 repr 和 str方法改变转为字符串的规则 class MyNumber: def __init__(self, value): '构造函数,初始化MyNumber对象' self.data = value def __str__(self): '''转换为普通人识别的字符串''' # print("__str__方法被调用!") return "自定义数字类型对象: %d" % self.data def __repr__(self): '''转换为eval能够识别的字符串''' return 'MyNumber(%d)' % self.data n1 = MyNumber(100) n2 = MyNumber(200) print('repr(n1) ====>', repr(n1)) print('str(n2) ====>', str(n2))
Python ビデオ チュートリアル 」
他の組み込み関数を書き換える方法:
__abs__ abs(obj ) 関数 __len__ len(obj) 関数 (整数を返さなければなりません) __reversed__ reversed(obj) 関数 (反復可能なオブジェクトを返さなければなりません) __round__round(obj) 関数
例:
# 此示例示意abs 函数的重写 class MyInteger: def __init__(self, v): self.data = v def __repr__(self): return 'MyInteger(%d)' % self.data def __abs__(self): v = abs(self.data) return MyInteger(v) # 用v创建另一个MyInteger对象 def __len__(self): return 10000 I1 = MyInteger(-10) print('I1 =', I1) I2 = abs(I1) print("I2 =", I2) print('len(I2)=', len(I2)) # 10000
数値変換関数の書き換え:
__complex__ complex(obj) 関数 __int__ int(obj) 関数 __float__ float(obj) 関数 __bool__ bool(obj) 関数 (以下のブール テスト関数のオーバーロードを参照)例:
# 此示例示意数据转换构造函数的重写方法 class MyNumber: def __init__(self, value): self.data = value def __repr__(self): return 'MyNumber(%d)' % self.data def __int__(self): 'int函数的重载' return self.data n1 = MyNumber(100) x = int(n1) print(n1) print(bool(n1)) # True n2 = MyNumber(0) print(bool(n2)) # True
ブール型テスト関数の書き換え:
形式:
__bool__#Function:
bool(obj) 関数の値に使用されます if 文の真理値式で使用されます while 文の真理値に使用されます式内の記述:
1. カスタムクラスに __bool__(self) メソッドがある場合、このメソッドの戻り値は bool(obj) として使用されます。 ) 戻り値 2. __bool__(self) メソッドがない場合、bool(x) は __len__(self) メソッドの戻り値が 0 であるかどうかを返し、ブール値をテストします。 3. __len__(self) メソッドがない場合は、直接 True を返します。例:
# 此示例示意bool(x) 函数的重写 class MyList: '自定义类型的列表,用来保存数据,内部用一个列表来存储数据' def __init__(self, iterable=()): self.data = [x for x in iterable] def __repr__(self): return 'MyList(%s)' % self.data def __len__(self): '''返回长度''' print("__len__方法被调用") return len(self.data) def __bool__(self): print("__bool__方法调用") for x in self.data: if not x: return False return True # return False # <<=== 所有对象都为False myl = MyList([0, -1, 2, -3]) # myl = MyList() print(myl) print(bool(myl)) if myl: print("myl为真值") else: print('myl为假值')
以上がPython関数の書き換えを理解する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。