>  기사  >  백엔드 개발  >  파이썬 함수 재작성을 이해하는 방법

파이썬 함수 재작성을 이해하는 방법

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼원래의
2019-06-25 15:43:333968검색

사용자 정의 클래스에 의해 생성된 인스턴스가 내장 객체처럼 내장 함수 작업을 수행할 수 있도록 해당 메서드를 사용자 정의 클래스에 추가합니다.

객체를 문자열 함수로: 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__ 인스턴스 메소드를 호출하여 8b988a0d974fd8aab2b69bf9b2cf8564 :

# 此示例示意通过重写 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) 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(&#39;myl为假值&#39;)

위 내용은 파이썬 함수 재작성을 이해하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.