namespace

codakcodak·2023년 10월 3일
0

OOP python

목록 보기
4/19
post-custom-banner

__dict__

class Robot:
    # 클래스 변수:인스턴스들이 공유하는 변수
    population = 0

    def __init__(self, name, code):
        self.name = name  # 인스턴스 변수
        self.code = code  # 인스턴스 변수
        Robot.population += 1

    # 인스턴스 메서드
    def say_hi(self):
        print(f"Hi!,my master call me {self.name}")

    # 인스턴스 메서드
    def cal_add(self, a, b):
        return a + b

    # 인스턴스 메서드
    def die(self):
        print(f"{self.name} is being destroyed")
        Robot.population -= 1
        if Robot.population == 0:
            print(f"{self.name} was last one.")
        else:
            print(f"There are still {Robot.population} robots working.")

    # 클래스 메서드
    @classmethod
    def how_many(cls):
        print(f"We have {cls.population} robots")


siri = Robot("Siri", 1234123)


# siri라는 인스턴스의 변수 및 메서드 정보들은 클래스 namespace안에 저장되어있다.
print(Robot.__dict__)
print("=====================")
print(siri.__dict__)


print("=====================")
# siri의 namespace안에 say_hi라는 메서드가 있으면 그것을 호출하고 없으면 Robot클래스의 namespace안에서 찾는다.(찾았다면 호출자가 인스턴스였을경우에 self에 자동으로 호출자 전달)
siri.say_hi()
# Robot의 namespace안에서 say_hi메서드를 찾았지만 호출자가 클래스이기에 self에 전달해줄 인스턴스를 따로 줘야한다.
Robot.say_hi(siri)
siri.how_many()

print("=====================")
# siri의 namesapce와 Robot의 namespace가 분리되어 있기에 siri.population실행시 siri안에서 먼저 찾고 있다면 그 값을 출력
siri.population = 20
print(siri.population)
print(Robot.population)
{'__module__': '__main__', 'population': 1, '__init__': <function Robot.__init__ at 0x1028b71c0>, 'say_hi': <function Robot.say_hi at 0x1028b7250>, 'cal_add': <function Robot.cal_add at 0x1028b72e0>, 'die': <function Robot.die at 0x1028b7370>, 'how_many': <classmethod(<function Robot.how_many at 0x1028b7400>)>, '__dict__': <attribute '__dict__' of 'Robot' objects>, '__weakref__': <attribute '__weakref__' of 'Robot' objects>, '__doc__': None}
=====================
{'name': 'Siri', 'code': 1234123}
=====================
Hi!,my master call me Siri
Hi!,my master call me Siri
We have 1 robots
=====================
20
1

dir()

  • 접근 가능한 메서드 및 변수드들 모두 출력
print(dir(siri))
print(dir(Robot))
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'cal_add', 'code', 'die', 'how_many', 'name', 'population', 'say_hi']
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'cal_add', 'die', 'how_many', 'population', 'say_hi']

__doc__

  • 클래스의 주석정보를 출력
class Robot:
    """
    author:codakcodak
    decription:자신을 소개하고 더하고 끝낼 수 있는 기능을 담은 로봇객체입니다.
    """

    # 클래스 변수:인스턴스들이 공유하는 변수
    population = 0

    def __init__(self, name, code):
        self.name = name  # 인스턴스 변수
        self.code = code  # 인스턴스 변수
        Robot.population += 1

    # 인스턴스 메서드
    def say_hi(self):
        print(f"Hi!,my master call me {self.name}")

    # 인스턴스 메서드
    def cal_add(self, a, b):
        return a + b

    # 인스턴스 메서드
    def die(self):
        print(f"{self.name} is being destroyed")
        Robot.population -= 1
        if Robot.population == 0:
            print(f"{self.name} was last one.")
        else:
            print(f"There are still {Robot.population} robots working.")

    # 클래스 메서드
    @classmethod
    def how_many(cls):
        print(f"We have {cls.population} robots")
print(Robot.__doc__)

    author:codakcodak
    decription:자신을 소개하고 더하고 끝낼 수 있는 기능을 담은 로봇객체입니다.

__class__

  • 클래스 또는 인스턴스가 해당하는 클래스 정보를 출력
print(Robot)
print(siri.__class__)
<class '__main__.Robot'>
<class '__main__.Robot'>
profile
숲을 보는 코더
post-custom-banner

0개의 댓글