1. class variable
num_act = 0은 class 변수다.
특정 class 구조를 공유하는 모든 instance가 공유하는 변수다.
위와 같이 account instance가 생성될 때마다 num_act += 1이 되면, 3개 instance가 형성되었기에 Account.num_act=3이 된다. 이 때 핵심은 동일한 클래스 구조가 공유하는 것이기에 Account.num_act로 사용되어야만 한다!
__del__(self)는 del instance_name 하면 해당 instance 삭제시켜준다.
print 함수가 전역변수를 불러와서 클래스변수는 print되지 않는 것이다.
좋은 예제인듯. 함수 내에서 생성된 지역변수는 함수가 끝나면 소멸되기 때문에 del d가 자동으로 실행된다.
그에 반해 전역변수는 남아있다.
요것도 상속은 받았지만 mul을 overwrite한건 아니라서 Times.factor는 여전히 1.
후술할 class method를 사용하면 어느 class에서나 cls.factor가 해당 cls의 그것으로 고정되기 때문에 이경우 Times를 상속받은 TwoTimes는 mul을 돌린다면 2*4가 도출된다. @classmethod는 꼭 달아줘야한다!! 그리고 cls는 instance method의 self와 같은거니까 필수다.
요런 느낌
2. Property
process
1) self.variable이 있으면 해당 variable을 return해주는 method에 @property
2) 이후부터는 @variable.setter 로 사용한다. 이 함수의 이름 또한 variable인데 value를 해당 variable에 대입한다.
3) Hyundai.price_getter() 이런식으로 할 필요없이, Hyundai.price 하면 바로 값이 반환되고, Hyundai.price = 5000 으로 바로 setter 기능을 사용할 수 있다.
바로 값을 대입. method보다 훨씬 편리하다.
get_price, set_price 선언한 뒤에 price = property(get_price, set_price)를 사용할 수도 있다. 그러나 @property가 직관적이고 편하다.
3. decorator
decorator로 사용될 함수는 미리 @decorator로 사용되기 전에 미리 선언되어있어야한다.
사실 뭐 그닥 안쓰는게 파이썬에서 함수를 인자로 전달가능한지라 잘 안쓴다. 이번에 처음 알았는데 안쓸것 같다.
@verbose를 특정 함수 위에 선언하면, 해당 함수를 verbose 함수의 인자로 전달한다. 이 때 함수 내에 해당 함수를 덧씌우는 새로운 함수를 형성하여 반환한다.
@soyo 또한 마찬가지. runtime 확인하는거라 이건 종종 쓴다.
class로 @verbose를 활용할수도 있다.
순서는 다음과 같다.
첫째, @verbose이기 때문에 my_func를 해당 클래스의 인자로 전달한다. init 실행
둘째, print(start\n)그리고 my_function()실행!
셋째, 자동으로 __call__이 실행되어 특정 기능을 소화한다.
'프로그래밍언어 > python' 카테고리의 다른 글
[파이썬문법] 16. class 상속 & class/static method (0) | 2022.04.22 |
---|---|
[파이썬문법] 15. yield(generator) & lambda func (0) | 2022.04.22 |
[파이썬문법] 14. 전역/지역변수 & *args/**kwargs (0) | 2022.04.22 |
[파이썬문법] 13. 고급파이썬문법(1) (0) | 2022.04.18 |
[파이썬] openpyxl & selenium 활용법 (0) | 2022.02.08 |