6 3 Python class 運算子過載

2021-07-25 10:05:11 字數 2952 閱讀 1856

描述符 -

特性 -

方法 -

__slots__-

__del__-

抽象基類 -

元類 -

在類中實現特殊方法的話,自定義物件就可以使用python的內建方法。如定義了__add__(),例項就能使用加法。

特殊方法主要有以下。

>>> 

print dir(1)

['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__delattr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', '__format__', '__getattribute__', '__getnewargs__', '__hash__', '__hex__', '__index__', '__init__', '__int__', '__invert__', '__long__', '__lshift__', '__mod__', '__mul__', '__neg__', '__new__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'imag', 'numerator', 'real']

example

__str__方法建立具有良好輸出格式的字串,使用print時會主動呼叫這個方法。

python所有內建數字都擁有real,imag屬性。

#!/usr/bin/python

# -*- coding: utf-8 -*-

class

complex

(object):

def__init__

(self,real = 0,imag = 0):

self.real = float(real)

self.imag = float(imag)

def__sub__

(self,other):

'''減'''

if issubclass(type(other),complex) or float(other):

return complex(self.real - other.real,self.imag - other.imag)

raise exception('type error')

def__add__

(self,other):

'''加'''

if issubclass(type(other),complex) or float(other):

return complex(self.real + other.real,self.imag + other.imag)

raise exception('type error')

def__div__

(self,other):

'''除'''

if (issubclass(type(other),complex) or float(other)) and other.real != 0

and other.imag != 0:

return complex(self.real / other.real,self.imag / other.imag)

raise exception('type error')

def__mul__

(self,other):

'''乘'''

if issubclass(type(other),complex) or float(other):

return complex(self.real * other.real,self.imag * other.imag)

raise exception('type error')

def__str__

(self):

return

'complex real = %s,imag = %s'%(self.real,self.imag)

if __name__ == '__main__':

a = complex(1,2)

b = complex(2,3)

print a

print b

print a+b #等價於a.__add__(b)...

print a.__add__(b)

print a-b

print a*b

print a/b

b = 10

print a+b

print a-b

print a*b

#print a/b #除數為0

#b + a #等價於b.__add__(a),typeerror: unsupported operand type(s) for +: 'int' and 'complex'

C 6 3 null 條件運算子

c 6 新增特性目錄 1 namespace csharp626 78internal class program919 20 21 在我們使用乙個物件的屬性的時候,有時候第一步需要做的事情是先判斷這個物件本身是不是bull,不然的話你可能會得到乙個 system.nullreferenceexce...

(運算子) 運算子

運算子既可作為一元運算子也可作為二元運算子。備註 unsafe context data guid 00bf87717d88a9fac1afadb796c675da 一元 運算子返回運算元的位址 要求 unsafe 上下文 bool data guid 9efd189df2cfb88799dca08...

c 運算子重及其呼叫

本文參考自 運算子過載就是賦予運算子新功能,其本質是乙個函式。運算子過載時要遵循以下規則 1.除了類屬關係運算子 成員指標運算子 作用域運算子 sizeof運算子和三目運算子 以外,其他運算子都可以過載。2.過載運算子限制在c 語言中已有的運算子範圍內的允許過載的運算子之中,不能建立新的運算子 3....