저는 이 7가지 질문에서 뭔가를 얻었습니다. 요약하면 다음과 같습니다.
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__
__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
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)은 누락될 수 없습니다. 자체 매개변수 .
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__()는 직접 서브클래스만 확인할 수 있습니다.
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의 테스트 방법이 통합됩니다.
다중 입금은 계속해서 혼란을 주므로 사용하지 않는 것이 좋습니다.
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)
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!