민서네집

파이썬 기초 강의 본문

Python

파이썬 기초 강의

브라이언7 2016. 8. 1. 08:34

Jupyter notebok tensorboard 실행하기_20160706

http://www.slideshare.net/dahlmoon/jupyter-notebok-tensorboard-20160706?from_m_app=ios



Matplotlib 기초 이해하기_20160730

http://www.slideshare.net/dahlmoon/matplotlib-20160730



텐서플로우 기초 이해하기 20160623

http://www.slideshare.net/dahlmoon/20160623-63318427



PYTHON 이해하기

http://www.slideshare.net/dahlmoon/python-20160815



Python_numpy_pandas_matplotlib 이해하기_20160815

http://www.slideshare.net/dahlmoon/python-numpyarray-20160815

A Byte of Python



두 개의 클래스에서 생성자 공통으로 사용하기 성공!


def __init__(self, name):

    self.name = name

    print("call __init__")

    return self

 

class Person:

    __init__ = __init__


class People:

    __init__ = __init__

    

p = __init__(Person, "Person")    


print(p.name)    # "Person" 출력

 

q = __init__(People, "People")


print(q.name)    # "People" 출력


이렇게 하면 class 에 변수가 생겨서, class 변수가 되어서 값을 공유하게 된다.

클래스 안의 생성자는 호출하지 않은것 같다. 생성자에서 return 하면 에러가 나야 되는데, 에러가 안난 것을 보니...


def __init__(self, name):

    self.name = name

    print("call __init__")

    return self

 

class Person:

    __init__ = __init__


class People:

    __init__ = __init__

    

p = __init__(Person, "Person")


print(p.__dict__)

print(Person.__dict__)


print(p.name)    # "Person" 출력

 

q = __init__(People, "People")


print(q.name)   # "People" 출력


print(q.__dict__)


s = __init__(Person, "PersonSSS")

print(s.name)

print(p.name)


[출력결과]

call __init__ {'__module__': '__main__', '__doc__': None, '__init__': <function __init__ at 0x00000000041BAC18>, 'name': 'Person'} {'__module__': '__main__', '__doc__': None, '__init__': <function __init__ at 0x00000000041BAC18>, 'name': 'Person'} Person call __init__ People {'__module__': '__main__', '__doc__': None, '__init__': <function __init__ at 0x00000000041BAC18>, 'name': 'People'} call __init__ PersonSSS PersonSSS # p.name이 "Person"으로 출력되야 하는데, "PersonSSS"로 바뀜.


아래와 같이 하면, 멤버변수가 객체에 생겨서 객체마다 다른 name 값을 갖게 된다.


def __init__(self, name=None):

self.name = name


class Person(object):

__init__ = __init__

p = Person()

__init__(p,"dahl")


print(Person.__dict__)

print(p.__dict__)

print(p.name)



class People():

__init__ = __init__


peo = People()

__init__(peo,"Moon")

print(People.__dict__)

print(peo.name)

print(peo.__dict__)


[출력결과]


{'__dict__': <attribute '__dict__' of 'Person' objects>, '__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None, '__init__': <function __init__ at 0x0000000003DBEA58>}
{'name': 'dahl'}
dahl
{'__module__': '__main__', '__doc__': None, '__init__': <function __init__ at 0x0000000003DBEA58>}
Moon
{'name': 'Moon'}


생성자를 공유하는 코드는 아래와 같이 하는 것이 더 맞을것 같다. 생성자는 자동으로 호출되는 것이라서 __init__()을 호출하는 부분을 삭제하고, 객체를 생성할 때 인자를 넣어서 호출함.


def __init__(self, name):

self.name = name


class Person(object):

__init__ = __init__

p = Person("dahl")


print(Person.__dict__)

print(p.__dict__)

print(p.name)



class People():

__init__ = __init__


peo = People("Name1")

print(People.__dict__)

print(peo.name)

print(peo.__dict__)


her = People("Name2")

print(her.name)

print(her.__dict__)

print(peo.name)

print(her.name)



Comments