상세 컨텐츠

본문 제목

[Dive into Deep Learning / 3주차] Python Class

심화 스터디/Dive into Deep Learning

by Imjjun 2022. 9. 30. 23:02

본문

작성자 : 16기 임정준

본 포스팅은 다음 자료들을 참고하여 작성되었습니다.

- https://docs.python.org/3/tutorial/classes.html#id2

- https://wikidocs.net/28#_9


0.  What is "Class(클래스)" in python?

  • Definition:  bundling data and functionality
  • Allowing new instances of that type to be made
  • Each class instane can have attiributes attached to it for maintaning its state

 

Cookie Frame: Class

Cookie: Object

 

 

 

 

 

 

 

 

 

 

1. Python Scope & Namespace

  • Namespace: a mapping from names to objects
  • There is absolutely no relation between names in different namespaces
  • Scope: a textual region of a Python program where a namespace is directly accessible
global
current module’s global names[전역]
nonlocal
the scopes of any enclosing functions[인접지역]
local
the innermost scope[지역]

#Function 내에서만 지정된 Local Variable의 Namespace는 Function 내부

#Module 전체에서 Global로 정의된 global variable의 Namespace는 전체 모듈 내부

#이미 Python 자체에서 가지고 있는 Name(list, set 등)에 대한 Namespace가 전체 Namespace에 우선

#Nonlocal로 지정한 variable은 한 indent(인접한 '한' Namespace까지)까지 Namespace를 가짐(Global보다 우선)

 

 

 

 

@Python Docs에 나온 예제를 통해 조금 더 알아보겠습니다

#1 Test spam: [line 2] def do_local() 내부에서만 spam“local spam”으로 지정되어, do_local() 바로 윗줄에 할당된 spamoutput으로 반환

 

#2 Nonlocal spam: “nonlocal” + 변수를 설정해주면, 인접한 스코프까지 변수할당 --> def scope_test() 내에서는 nonlocal로 할당

 

#3 Nonlocal spam: globalspam을 global variable로 설정한다 하더라도, nonlocalnamespace가 우위

--> 따라서 nonlocal variable spam이 출력

 

#4 global spam: def scope_test() 외부의 scope에 대해서는 global로 정의해준 spam = “global spam” return

 

 

 

 

 

 

2. Class Syntax

 

  • MyClass.i = 12345
  • MyClass.f = ‘hello world’

 

 

  • def __init__ : automatically invoke when class instantiates --> 클래스가 호출되는 순간 자동으로 실행되는 함수로 Class Environment에 대한 각종 Setting을 하기 위해 주로 활용
  • x=Complex(3.0, -4.5) : x라는 클래스의 인스턴스 생성 및 해당 객체 x를 클래스의 지역변수로서 대입: self
  • 객체 x에 대하여 Attribute(어트리뷰트)를 호출하여도 Class method들이 작동 --> x.r, x.i를 통해 확인 가능

@Grammar 주의사항

 

  • __init__내에 list 등 Data Structure를 정의하지 않는다면, Class 호출하였을 때 인스턴스에 trick 값이 쌓이는 것이 아니라 Class에 쌓이게 됨 à 모든 Dog 인스턴스에 tricks 리스트를 공유

 

 

 

 

  • 따라서 Class를 호출할 때마다 tricks가 새롭게 생성될 수 있도록 __init__ 내에 Data Structure들을 정의하는 것이 적절한 Class 설계

 

 

 

 

 

 

 

3. Inheritance

Inheritance : defining a class that takes all the functionality from a parent class and allowing to add more

 

 
Code from Week-3 Class
MultiLayerPerceptron(nn.Module): Inheritance from ‘nn.module’ & being able to use nn.Module’s Methods
If super() is called, nn.Module which is the ‘Parent’ class is also called
#꼭 그런 건 아니지만, 일반적으로 super().__init__()를 하면 해당 nn.Module의 라이브러리가 기본적인 Setting을 해주기에 영상에서 분반장님이 언급해주신 부분
For super().__init__(), it can be considered that nn.Module.__init__() is just called, not other methods

 

 

 

@다중상속

  • Multiple Inheritance: also supported in Python
  • If method is not found in Base1, then Class calls secondary parent class, Base 2
  • Overlap in the hierarchy(계층구조)

 

 

 

4. Iterators & Generators

  • Iterators
  • Iter(s): s를 반복, ‘for word in s:’로 개념 이해하면 편리
  • next(): iterating, 다음 요소를 return

 

 

 

 

 

 

#Week-3 Code Review

  • Iter(train_loader).next(): iterating ‘train_loader’, with returning next elements until finishing

 

 

 

 

 

 

 

 

 

  • Generators
  • 본 발표에서는 Generator 개념보다는 Generator 표현식에 집중 !
  • For문을 argument 내부에 삽입하여, Method 내에서 함수가 실행할 수 있게 하여, for문을 외부 Scope에서 번거롭게 쓰지 않아도, 해당 함수의 직관적인 iterating이 가능

 

5. Practical Analysis

  • Class LinearRegression
  • MultiOutputMixin, RegressorMixin, LinearModel을 상속받은 Multiple Inherited Class
  • Class가 호출되면 __init__ function이 자동적으로 호출: intercept, normalize, n_jobs 등을 정의
  • 일반적으로 LinearRegression을 train시킬 때,

 lr=LinearRegression()

  lr.fit(x_train, y_train)

 으로 많이 활용하는데, 이때 fit 함수는 본 Class의 Method이며, lr이라는 인스턴스에서 클래스 내의 fit 메소드를 호출한 것이 상기된 예제

 

 

 

 

 

 

관련글 더보기

댓글 영역