<jupyter_start><jupyter_text>summary- 상속 : 다른 클래스를 받아서 기능을 추가해서 새로운 클래스를 만드는 방법- super : 부모클래스에서 특정 함수의 코드를 가져오는 방법- getter, setter : 클래스로 만들어진 객체에 변수값을 수정할때 특정 함수를 통해서 수정하고 출력하는 방법- non public(private) : mangling(__) `_(클래스명)` 이 붙은 변수로 객체를 생성할 때 변경이 되어서 생성- is a / has a : 클래스를 설계하는 방법- magic(special) method    - 비교 : `__eq__(==)`, `__ne__(!=)`, `__lt__()`, `__le__(=)`    - 연산 : `__ad__(+)`, `__sub__(-)`, `__mul__(*)`, `__truediv__(/)`, `__floordiv__(//)`, `__mod__(%)`, `__pow__(**)`,    - 그외 : `__repr__`, `__str__`<jupyter_code># Integer 객체
class Integer:
    
    def __init__(self, number):
        self.number = number
        
    def __add__(self, obj):
        return self.number + obj.number
    
    def __str__(self):
        return str(self.number)
    def __repr__(self):
        return str(self.number)
num1 = Integer(1)
num2 = Integer(2)
num1+num2
num1
print(num1)
# 계좌 클래스 만들기 
# 변수 : 자산(asset), 이자율(interest)
# 함수 : 인출(draw), 입금(insert), 이자추가(add_interest)
# 인출시 자산이상의 돈을 인출할 수 없습니다.
class Account:
    
    def __init__(self, asset = 0, interest = 1.05):
        self.asset = asset
        self.interest = interest
        
    def draw(self, money):
        if self.asset >= money:
            self.asset -= money
            print("{}원 인출되었습니다.".format(self.asset))
        
        else:
            print("잔액 {}원 부족".format(money - self.asset))
            
    def insert(self, money):
        self.asset += money
        print("잔액 : {}".format(self.asset))
    
    def add_interest(self):
        self.asset *= self.interest
        print("이자가 지급되었습니다.")
        
    def __repr__(self):
        return "Account(asset:{}, interest:{})".format(self.asset, self.interest)
account1 = Account(10000)
account1
account1.draw(12000)
account1.draw(3000)
account1.insert(7000)
account1.add_interest()
account1<jupyter_output><empty_output><jupyter_text>Module Package- 모듈 : 변수, 함수, 클래스를 모아놓은 (.py) 확장자를 가진 파일- 패키지 : 모듈의 기능을 디렉토리별로 정리해놓은 개념  1. 모듈 - 모듈 생성- 모듈 호출<jupyter_code>!ls
%%writefile dss.py

num = 1234

def disp1(msg):
    print("disp1",msg)
    
def disp2(msg):
    print("disp2",msg)

class Calc:
    def plus(self,*args):
        return sum(args)
!ls
%reset
%whos
# 모듈 호출 : import
import dss
%whos
dss.num
dss.disp1("python")
calc = dss.Calc()
calc.plus(1,2,3,4)
# 모듈 안에 특정 함수, 변수, 클래스 호출
from dss import num, disp2
%whos
%reset
# 모듈의 모든 변수를 가져옴
from dss import *
%whos<jupyter_output>Variable   Type        Data/Info
--------------------------------
Calc       type        <class 'dss.Calc'>
disp1      function    <function disp1 at 0x00000193FFE15950>
disp2      function    <function disp2 at 0x00000193FFE15F28>
make_ls    function    <function make_ls at 0x00000193FFEE1158>
msg        str         Python Test Function
num        int         1234<jupyter_text>2. Package- 패키지 생성- 패키지 호출- setup.py 패키지 설치 파일 만들기<jupyter_code># 디렉토리 생성
!mkdir -p school\dss
!mkdir - p school\web
!tree school
# 패키지 사용시 디렉토리에 __init__.py 파일을 추가
# python 3.3 버전 이상에서는 필요 없음
!touch school\dss\__init__.py
!touch school\web\__init__.py
!tree school\
%%writefile school/dss/data1.py

def plus(*args):
    print("data1")
    return sum(args)
%%writefile school/dss/data2.py

def plus2(*args):
    print("data2")
    return sum(args)
%%writefile school/web/url.py

def make(url):
    return url if url[:7] == "http://" else "http://" + url
%reset
import school.dss.data1
%whos
school.dss.data1.plus(1,2,3)
import school.dss.data1 as dss
dss.plus(1,2)
# school.web : 디렉토리
# url : 모듈
from school.web import url
url.make("google.com")
url.make("http://naver.com")
# 패키지의 위치 : 특정 디렉토리에 있는 패키지는 어디에서나 import 가능
import sys

for path in sys.path:
    print(path)
packages = !ls C:\User\lib\site-packages
len(packages)
# setup.py 를 작성해서 패키지를 설치해서 사용
# setup
!tree shcool
%%writefile school/dss/__init__.py

__all__ = ["data1", "data2"]
%%writefile school/setup.py

from setuptools import setup, find_packages

setup(
    name = "dss",
    packages = find_packages(),
    include_package_data=True,
    version="0.0.1",
    author="hee",
    author_email="<EMAIL>:",
    zip_sefe=False,
)
!rm dss.py
# 패키지 설치 확인
!pip list | grep dss
# 패키지 설치
# school $python setup.py develop
# 커널 리스타트
# develop : 개발자 모드, 코드를 수정하면 설치된 패키지도 같이 수정
# build : 
from dss import *
# uninstall
# pip uninstall dss<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.14226231783483692, 'fraction_numerical': 0.028221142724959517, 'mean_word_length': 2.974264705882353, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 18, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '290694', 'license': 'MIT', 'n_tokens_mistral': 2061, 'n_tokens_neox': 2303, 'n_words': 444, 'path': 'python/08_module_package.ipynb', 'repo_name': 'hee22/TIL', 'size': '4334'}