Python에서 인스턴스 유형을 상속으로 변경

이반

나는 클래스 Person와 2 개의 클래스를 가지고 Child있으며 Adult그것은`Person.


class Person:

    def __init__(self, name):
        self.name = name
        self.age = 0

    def say_hi(self):
        print("Hi, I am " + self.name)

    def set_age(self, age):
        self.age = age

class Child(Person):

    def play_with_children(self):
        print("Playing with children")

class Adult(Person):

    def drink_alcohol(self):
        print("drinking")

인스턴스를 Person 만든 다음 설정 age하고 이에 따라이 인스턴스가 a Child또는 Adult.

또한 그것이 a Child이고 age증가한다면 나는 그것이 Adult. Person의 생성자 name가 새 인스턴스를 만들기위한 것이기 때문에이 코드에 오류 가 있습니다.

person1 = Person("Marvin")

person1.set_age(15)

if person1.age < 21:
    person1 = Child()# This is an error => expects the name
    #But I wouldn't like to handle all members like this => person1 = Child(person1.name)
    #I don't want a new instance, is that even posible?

person1.say_hi() 
person1.play_with_children()


person1.set_age(25)

if person1.age > 21:
    person1 = Adult()# This is an error => expects the name
    #But I wouldn't like to handle all members like this => person1 = Adult(person1.name)
    #I don't want a new instance, is that even posible?

person1.say_hi()   
person1.drink_alcohol()
  • 이것이 가능할까요?

  • 새 인스턴스를 만들지 않고도이 작업을 수행 할 수 있습니까?

추신 : 이것은 내가 가지고있는 더 복잡한 문제의 문제를 보여주는 샘플 코드입니다 (실제로 어린이와 성인이 아닙니다 : D).

이반

주석에서 언급했듯이 Python 3 __class__에서는 모든 인스턴스에 액세스하여 변경할 수 있습니다.

주의해야하지만이 방법으로 여러 클래스의 속성을 동일한 인스턴스에 추가하고 이상한 괴물을 만들 수 있습니다 (방법은 안전합니다).

person1 = Person("Marvin")

person1.set_age(15)

if person1.age < 21:
    person1.__class__ = Child

person1.say_hi() 
person1.play_with_children()


person1.set_age(25)

if person1.age > 21:
    person1.__class__ = Adult


person1.say_hi()   
person1.drink_alcohol()

그래서 괴물 :

class Dog:

    def wouf(self):
        print("wouf")

person1.__class__ = Dog
print("Attributes are saved, name: "+ person1.name)
#But methods not, so now I can't use person1.say_hi()
person1.wouf()

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Elastic Beanstalk 환경 유형을 부하 분산에서 단일 인스턴스로 변경하는 방법

분류에서Dev

클래스 상속, 루비의 클래스 유형을 부모에서 자식으로 변경

분류에서Dev

메서드에서 인스턴스 속성을 영구적으로 변경할 수 없습니까?

분류에서Dev

클래스에서 인스턴스화 된 상수 값을 변경 / 재 할당 할 수있는 이유

분류에서Dev

인스턴스 목록을 인스턴스 속성 목록으로 변환

분류에서Dev

유형을 인스턴스 변수로 사용

분류에서Dev

내부 유형으로 매개 변수화 된 클래스에서 상속

분류에서Dev

열 유형을 텍스트에서 정수로 변경

분류에서Dev

Excel vba에서 데이터 유형을 텍스트로 변경

분류에서Dev

구체적 유형으로 객체를 인스턴스화 할 때 변수에 제네릭 유형을 사용할 수없는 이유는 무엇입니까?

분류에서Dev

Vue 돌연변이 변경 인스턴스 (MyArray에서 Array로)

분류에서Dev

날짜를 인스턴트 유형으로 변경하는 Cassandra 스크립트

분류에서Dev

상속 된 인스턴스에서 로컬 클래스 변수에 액세스

분류에서Dev

유형 인스턴스에서 입력 매개 변수를 수동으로 변환

분류에서Dev

파이썬에서 다른 인스턴스의 메서드를 사용하여 한 인스턴스의 속성을 변경하는 방법

분류에서Dev

클래스에 종속 된 유형 및 함수를 사용하는 모든 클래스 인스턴스에서 동일한 값을 갖는 C ++ 변수

분류에서Dev

python 3 클래스의 인스턴스에서 전역 적으로 목록이 변경되는 이유는 무엇입니까?

분류에서Dev

인스턴스 변수가 Sinatra의 경로간에 지속되지 않는 이유는 무엇입니까?

분류에서Dev

인스턴스를 다른 유형의 인스턴스로 변환

분류에서Dev

유형 이름에서 동적으로 인스턴스 생성

분류에서Dev

원본 인스턴스를 유지하여 PHP에서 배열 항목의 속성 값 변경

분류에서Dev

인스턴스 선언에서 유형 변수의 순서

분류에서Dev

유형 인스턴스를 사전으로 변환

분류에서Dev

Python OOP에서 클래스 인스턴스의 이상한 유형 정보

분류에서Dev

C #에서 int 유형을 char 유형으로 변경

분류에서Dev

Redshift에서 열 유형을 varchar에서 날짜 스탬프로 변경

분류에서Dev

인스턴스 테넌시를 전용에서 공유로 변경하는 방법은 무엇입니까?

분류에서Dev

Amazon EC2 변경 인스턴스 유형, 볼륨에 가능한 문제?

분류에서Dev

Amazon EC2 변경 인스턴스 유형, 볼륨에 가능한 문제?

Related 관련 기사

  1. 1

    Elastic Beanstalk 환경 유형을 부하 분산에서 단일 인스턴스로 변경하는 방법

  2. 2

    클래스 상속, 루비의 클래스 유형을 부모에서 자식으로 변경

  3. 3

    메서드에서 인스턴스 속성을 영구적으로 변경할 수 없습니까?

  4. 4

    클래스에서 인스턴스화 된 상수 값을 변경 / 재 할당 할 수있는 이유

  5. 5

    인스턴스 목록을 인스턴스 속성 목록으로 변환

  6. 6

    유형을 인스턴스 변수로 사용

  7. 7

    내부 유형으로 매개 변수화 된 클래스에서 상속

  8. 8

    열 유형을 텍스트에서 정수로 변경

  9. 9

    Excel vba에서 데이터 유형을 텍스트로 변경

  10. 10

    구체적 유형으로 객체를 인스턴스화 할 때 변수에 제네릭 유형을 사용할 수없는 이유는 무엇입니까?

  11. 11

    Vue 돌연변이 변경 인스턴스 (MyArray에서 Array로)

  12. 12

    날짜를 인스턴트 유형으로 변경하는 Cassandra 스크립트

  13. 13

    상속 된 인스턴스에서 로컬 클래스 변수에 액세스

  14. 14

    유형 인스턴스에서 입력 매개 변수를 수동으로 변환

  15. 15

    파이썬에서 다른 인스턴스의 메서드를 사용하여 한 인스턴스의 속성을 변경하는 방법

  16. 16

    클래스에 종속 된 유형 및 함수를 사용하는 모든 클래스 인스턴스에서 동일한 값을 갖는 C ++ 변수

  17. 17

    python 3 클래스의 인스턴스에서 전역 적으로 목록이 변경되는 이유는 무엇입니까?

  18. 18

    인스턴스 변수가 Sinatra의 경로간에 지속되지 않는 이유는 무엇입니까?

  19. 19

    인스턴스를 다른 유형의 인스턴스로 변환

  20. 20

    유형 이름에서 동적으로 인스턴스 생성

  21. 21

    원본 인스턴스를 유지하여 PHP에서 배열 항목의 속성 값 변경

  22. 22

    인스턴스 선언에서 유형 변수의 순서

  23. 23

    유형 인스턴스를 사전으로 변환

  24. 24

    Python OOP에서 클래스 인스턴스의 이상한 유형 정보

  25. 25

    C #에서 int 유형을 char 유형으로 변경

  26. 26

    Redshift에서 열 유형을 varchar에서 날짜 스탬프로 변경

  27. 27

    인스턴스 테넌시를 전용에서 공유로 변경하는 방법은 무엇입니까?

  28. 28

    Amazon EC2 변경 인스턴스 유형, 볼륨에 가능한 문제?

  29. 29

    Amazon EC2 변경 인스턴스 유형, 볼륨에 가능한 문제?

뜨겁다태그

보관