python - 대상 클래스에 대한 내장 방법
기본 제공 방법
__init__(self [, ...])
__new__(cls [, ...])
# ,
# : ,
class CapStr(str):
def __new__(cls,string):
string = string.upper()
return str.__new__(cls, string) # new
a = CapStr("i love you")
print(a) # I LOVE YOU
__del__(self)
# __del__(self)
class C:
def __init__(self):
print(" init, ")
def __del__(self):
print(" del, ")
c1 = C() # , init,
c2 = c1 #
c3 = c2
del c3 #
del c2 #
del c1 # , del,
__str__(self)**
class Cat:
def __init__(self, new_name, new_age):
self.name = new_name
self.age = new_age
def __str__(self):
""" """
# print(num)
return " :%s , :%d" % (self.name, self.age)
c1 = Cat("Tom", 8)
print(c1) # : :Tom , :8
__repr__(self)
class A:
def __init__(self, name):
self.name = name
def __str__(self):
return "name:%s,----->from str" % self.name
def __repr__(self):
return "name:%s,----->from repr" % self.name
a1 = A("jack")
a2 = A("cindy")
print(a1) # name:jack,----->from str
p = [a1, a2]
print(p)
# [name:jack,----->from repr, name:cindy,----->from repr]
# __repr__ , __str__ ,
속성 액세스:
__getattr__(self, name)
__getattribute__(self, name)
__setattr__(self, name, value)
__delattr__(self, name)
class C:
def __getattribute__(self, name):
print("getattribute")
super().__getattribute__(name) #
# return self.name
def __getattr__(self, name):
print("getattr")
def __setattr__(self, name, value):
print("setattr")
super().__setattr__(name, value)
# self.name = value
def __delattr__(self, name):
print("delattr")
super().__delattr__(name)
# del self.name
c = C()
print(c.x) # getattributr/getattr
c.x = 10 # setattr
print(c.x) # getattribute
del c.x # delattr
주의: 모든 속성 방법, 무한 순환 주의
__getitem__
__setitem__
__delitem__
item 시리즈가 사전 형식으로 속성에 접근할 때 호출됨
사전 키로 존재하는 속성에 접근할 때getitem__,이 점은 와 다르다getattr__
class Foo:
def __init__(self, a):
self.a = a
def __getitem__(self, item):
print("__getitem__ ")
def __getattr__(self, item):
print("__getattr__ ")
f = Foo("word")
f["a"]
f["b"]
#output:
__getitem__
__getitem__
[]를 사용하여 인스턴스 속성을 설정할 때 트리거setitem__
class Foo:
def __setitem__(self, key, value):
print("__setitem__ ")
def __setattr__(self, key, value):
print("__setattr__ ")
f = Foo()
f.x = 10
f["y"] = 10
#output:
__setattr__
__setitem__
[]를 사용하여 인스턴스 속성을 삭제할 때 트리거delitem__
class Foo:
def __init__(self, a, b):
self.a = a
self.b = b
def __delitem__(self, key):
print("__delitem__ ")
def __delattr__(self, key):
print("__delattr__ ")
f = Foo("one", "two")
del f.a
del f["b"]
#output:
__delattr__
__delitem__
설명자:
설명자는 무엇입니까?
설명자의 용도:
속성 호출 시 트리거get__()
**속성에 값을 지정할 때 트리거,set__()**
del로 속성 삭제 시 트리거delete__()
__get__
__set__
__delete__
설명자를 정의합니다. 다음 신식 클래스는 설명자입니다.
class Foo:
def __get__(self, instance, owner):
print(" get...")
def __set__(self,instance, value):
print(" set...")
def __delete__(self, instance):
print(" delete...")
묘사 부류의 실례화된 대상은 속성 조작을 해도 이 세 가지 방법의 집행을 촉발하지 않는다
설명자는
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.