참고 자료
https://docs.python.org/3/library/functions.html
파이썬 버전 3.7 기준
클래스(class)와 어트리뷰트(attribute)와 관련된 내장함수
type(), object(), super(), isinstance(), issubclass(), var(), setattr(), getattr(), delattr(), hasattr(), property(), callable() 등.
오브젝티브를 생성해주는 내장함수
type(x) or type(name, bases,dict)
○ 입력되는 x의 자료형을 반환한다.
○ x.__class__가 반환하는 것과 같은 객체이다.
○ 실제 객체를 자료형을 알기 위해서는 isinstance() 내장 함수가 권장되는데, 이 함수는 서브클래스를 고려하기 때문이다.
○ 세 개의 인자가 입력으로 들어가면, 새로운 타입의 객체를 반환한다.
▷ 이 것은 본래 class구문의 동적인 형태라고 볼 수 있다.
▷ 다음 예제 구문에서 봤을 때 class 구문으로 작성된 X와 type 구문으로 작성된 G는 거의 동일하다고 볼 수 있다.
▷ name 값은 클래스 이름이며 __name__ 어트리뷰트에 대응되고, bases 튜플은 베이스 클래스들을 항목화하며 __bases__ 어트리뷰트가 되고, dict 딕셔너리는 클래스 바디의 정의들이 들어있는 이름 공간이며 __dict__ 어트리뷰트가 되도록 표준 딕셔너리에 복사된다.
In[2]: class X:
...: a = 1
...:
In[3]: G = type('G', (object,), dict(a=1))
object()
○ 기능이 없는 새로운 오브젝트(클래스)를 반환한다.
○ object()는 모든 클래스의 베이스 클래스이며, 모든 파이썬 클래스의 인스턴스에 공통적인 메서드를 포함하고 있다.
○ 이 함수는 입력이 없다.
상속 혹은 서브클래스와 관련된 내장함수
super([type[, object-or-type]])
○ 메서드 호출을 type의 부모나 형제 클래스에 위임하는 프록시 객체를 반환한다.
▷ 이 함수는 상속되었긴 하지만 클래스 내에서 재정의가 되어버린 메서드에 접근할 때 유용하다.
▷ 쉽게 설명하면 자신의 메서드가 아니라 부모나 형제 클래스에 있는 메서드에 접근한다.
○ type을 생략해서 건너뛸 수 있다는 점을 제외하면 getattr()과 상당히 유사한 작업을 수행한다.
isinstance(object, classinfo)
○ object 인자가 classinfo 인자이거나 혹은 classinfo의 서브 클래스의 인스턴스면 True를 반환한다.
○ object 인자가 형의 객체가 아니면, 항상 False을 반환한다.
issubclass(class, classinfo)
○ class가 classinfo의 서브클래스인 경우 True를 반환한다. 임의의 클래스는 그 자체가 자신의 서브클래스로 여겨진다.
사용 예)
In[2]: class x:
...: a=10
...:
In[3]: class x_son(x):
...: b=10
...:
In[4]: isinstance(x.a, int)
Out[4]: True
In[5]: issubclass(x,x_son)
Out[5]: False
In[6]: issubclass(x_son,x)
Out[6]: True
어트리뷰트(attribute)와 관련된 내장함수
dir([object])
○ 인자가 입력되지 않은 경우 현재 지역에 있는 변수, 클래스, 함수 등의 리스트를 반환한다.
○ 인자가 있는 경우, 해당 객체의 유효한 어트리뷰트들의 리스트를 반환한다.
▷ 객체에 __dir__() 메서드가 있는 경우 이 메서드를 호출한다. 다만 반드시 어트리뷰트 리스트를 반환해야한다.
▷ 객체에 __dir__() 메서드가 없는 경우는 직접 어트리뷰트의 리스트를 반환하려 시도한다. 다만 결과는 완전하지 않고, 객체가 __getattr__() 메서드를 가질 경우 부정확할 가능성도 존재한다.
vars([object])
○ 모듈, 클래스, 인스턴스 또는 __dict__ 어트리뷰트가 있는 다른 객체의 __dict__ 어트리뷰트를 반환한다.
○ 모듈이나 인스턴스 같은 객체는 업데이트가 가능한 __dict__ 어트리뷰트를 가진다. 그러나 다른 객체는 __dict__어트리뷰트에 쓰기 제한을 가질 수도 있다.
○ 인자가 없는경우 locals와 같이 작동한다.
setattr(object, name, value)
○ 위의 type과 유사하지만, 입력하려는 object를 미리 정의해야하는 면이 다르다.
○ 기존에 존재하는 어트리뷰트에 값을 대입하거나, 새로운 어트리뷰트를 만들어 값을 대입한다.
○ 사실상 setattr(x, 'a', 1)과 x.a=1은 동일하다.
getattr(object, name[, default])
○ setattr함수와는 조금 다르게 기존의 어트리뷰트가 존재하는 경우 그 값을 출력한다.
○ Default값이 주어질 경우 어트리뷰트가 존재하지 않으면 Default를 출력하나, 만약 Default가 입력되지 않은 상황에서 어트리뷰트가 존재하지 않는 경우 에러를 일으킨다.
delattr(object, name)
○ 입력된 오브젝트에서의 어트리뷰트를 삭제한다.
hasattr(object, name)
○ 입력된 오브젝트에 어트리뷰트가 존재하면 True를 존재하지 않으면 False을 반환한다.
사용 예)
In[79]: class x:
...: ob=1
...:In[80]: setattr(x,'gg',222)
In[81]: x.gg
Out[81]: 222
...
In[82]: getattr(x, 'gg', 'No attr')
Out[82]: 222
In[83]: getattr(x, 'kk', 'No attr')
Out[83]: 'No attr'
In[84]: hasattr(x, 'gg')
Out[84]: True
In[85]: hasattr(x, 'kk')
Out[85]: False
In[86]: delattr(x, 'ob')
In[87]: hasattr(x, 'ob')
Out[87]: False
property 내장함수
property(fget=None, fset=None, fdel=None, doc=None)
○ 각 입력 별 내용은 다음과 같다.
▷ fget은 어트리뷰트 값을 얻는 함수이다.
▷ fset은 어트리뷰트 값을 설정하는 함수이다.
▷ fdel은 어트리뷰트 값을 삭제하는 함수이다.
▷ doc는 어트리뷰트의 독스트링을 만든다.
사용 예 1)
In[56]: class G:
...: def __init__(self):
...: self.__x = None
...: def getx(self):
...: return self.__x
...: def setx(self, value):
...: self.__x = value
...: def delx(self):
...: del self.__x
...: x = property(getx, setx, delx, "This is 'x' property.")
...:
In[57]: y=G()
In[58]: y.getx()
In[59]: y.setx(50)
In[60]: y.getx()
Out[60]: 50
In[61]: y.__x
AttributeError: 'G' object has no attribute '__x'
사용 예 2)
In[70]: class G:
...: def __init__(self):
...: self.__x = None
...: @property
...: def x(self):
...: return self.__x
...: @x.setter
...: def x(self, value):
...: self.__x = value
...: @x.deleter
...: def x(self):
...: del self.__x
...:
In[71]:y = G()
In[72]: y.x = 50
Change x value
In[73]: y.x
Out[73]: 50
In[74]: y.__x
AttributeError: 'G' object has no attribute '__x'
기타 내장함수
callable(object)
○ object 인자가 불러올 수 있을 거같은 경우에 True을 아니면 False을 반환한다.
○ True값을 돌려주더라도 불러오기에 실패할 가능성이 존재하지만, False일 경우에는 반드시 실패한다.
'Python > 파이썬 기초' 카테고리의 다른 글
흐름 제어(if) 및 반복(for, while) 구문 - 파이썬 기초(17) (0) | 2018.12.23 |
---|---|
기타 내장함수 - 파이썬 기초(16) (0) | 2018.12.21 |
입출력과 관련된 내장함수(print, open, input) - 파이썬 기초(14) (0) | 2018.12.19 |
eval(), exec(), compile() 내장함수 - 파이썬 기초(13) (0) | 2018.12.18 |
시퀀스형 자료형과 관련된 내장함수 - 파이썬 기초(12) (0) | 2018.12.17 |
댓글