> 백엔드 개발 > 파이썬 튜토리얼 > 읽고 쓰는 능력을 향상하기 위한 7가지 Python 질문

읽고 쓰는 능력을 향상하기 위한 7가지 Python 질문

WBOY
풀어 주다: 2023-04-11 16:52:03
앞으로
1794명이 탐색했습니다.

저는 이 7가지 질문에서 뭔가를 얻었습니다. 요약하면 다음과 같습니다.

1. 반사 산술 연산자

obj를 나타내는 + - 연산자를 나타내는 __add__​ 및 __sub__​와 같은 Python의 마법 함수를 알고 계실 것입니다. +/ - 뭔가, 하지만 뭔가 +/- obj를 나타낼 수 있는 __radd__, __rsub__ 함수도 있다는 사실을 모를 수도 있습니다.

예제는 다음과 같습니다:

class Dog:
def __add__(self, other):
return "from __add__"
def __radd__(self, other):
return "from __radd__"
dog = Dog()
print(dog + 1) # from __add__
print(1 + dog) # from __radd__
로그인 후 복사

2.__getattr__ vs __getattribute__

__getattr__​ 매직 메소드는 존재하지 않는 속성을 얻으려고 할 때만 호출되며, __getattribute__는 속성에 액세스하려고 할 때마다 호출됩니다. .

코드는 다음과 같습니다:

class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def __getattr__(self, key):
return f"{key} not found"
dog = Dog("taidi", 5)
print(dog.name)# taidi
print(dog.age) # 5
print(dog.breed) # breed not found
로그인 후 복사
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def __getattribute__(self, key):
return f"{key} not found"
dog = Dog("taidi", 5)
print(dog.name)# name not found
print(dog.age) # age not found
print(dog.breed) # breed not found
로그인 후 복사

3. super().__init__()를 작성하는 또 다른 방법

class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
class Dog(Animal):
def __init__(self, name, age, breed):
super().__init__(name, age)
self.breed = breed
로그인 후 복사

은 다음과 같습니다.

class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
class Dog(Animal):
def __init__(self, name, age, breed):
Animal.__init__(self, name, age)
self.breed = breed
로그인 후 복사

Animal.__init__(self, name, age)은 누락될 수 없습니다. 자체 매개변수 .

4. 서브클래스 확인 방법

class Animal: pass
class Dog(Animal): pass
class Cat(Animal): pass
class GermanSheperd(Dog): pass
print(Animal.__subclasses__())
# [<class '__main__.Dog'>, <class '__main__.Cat'>]
로그인 후 복사

단, .__subclasses__()는 직접 서브클래스만 확인할 수 있습니다.

5. 여러 통합을 사용할 때 하위 클래스에서 동일한 이름을 가진 함수는 무엇입니까?

class A:
def test(self):
print("A")
class B:
def test(self):
print("B")
class C(A, B):
pass

C().test() # A
로그인 후 복사

A와 B에는 모두 테스트 방법이 있는데 C에는 어떤 테스트 방법이 통합되어 있나요? Python에서는 가장 왼쪽 클래스가 우선합니다.

여기서 A는 가장 왼쪽 상위 클래스이므로 A의 테스트 방법이 통합됩니다.

다중 입금은 계속해서 혼란을 주므로 사용하지 않는 것이 좋습니다.

6 __invert__ 마법 함수

class Dog:
def __invert__(self):
return "test"
dog = Dog()
print(~dog) # test
로그인 후 복사

~ 연산자는 "bitwise not"을 의미하며 일반적으로 내용을 반전하는 데 사용됩니다. 보다 의미 있는 예는 다음과 같습니다.

class Coordinate:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return f"({self.x}, {self.y})"
def __invert__(self):
return Coordinate(-self.x, -self.y)
a = Coordinate(3, 4)
b = ~a
print(a, b) # (3, 4) (-3, -4)
로그인 후 복사

7. class를 사용하지 않고 클래스를 생성합니다

def init(self, name, age):
self.name = name
self.age = age
def bark(self):
print("woof")
Dog = type("Dog", (), {"__init__":init, "bark":bark})


dog = Dog("taidi", 10)
print(dog.name)
print(dog.age)

# taidi
# 10
로그인 후 복사

여기서는 클래스를 생성하기 위해 3개의 매개변수를 입력합니다.

첫 번째 매개변수 __name__은 클래스의 이름입니다. 두 번째 매개변수 __bases__는 상위 클래스를 포함하는 튜플입니다. 세 번째 매개변수 __dict__는 속성과 메서드를 포함하는 사전입니다.

동일:

class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
print("woof")
로그인 후 복사

위 내용은 읽고 쓰는 능력을 향상하기 위한 7가지 Python 질문의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:51cto.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿