사용자 정의 클래스에 의해 생성된 인스턴스가 내장 객체처럼 내장 함수 작업을 수행할 수 있도록 해당 메서드를 사용자 정의 클래스에 추가합니다.
객체를 문자열 함수로: 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))
__abs__ __abs(obj) function
__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
형식:
__bo ol__
함수:
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为假值')
위 내용은 파이썬 함수 재작성을 이해하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!