주어진 문자열에서 동적으로 클래스 인스턴스를 만들고 사전에 깊은 복사본을 저장합니다.

Cord Kaldemeyer

주어진 문자열 집합에서 동적으로 여러 클래스 인스턴스 (복사)를 만들고 싶고 그것에 붙어 있습니다.

내 접근 방식은 다음과 같습니다.

# -*- coding: utf-8 -*-


# I have an number of different classes
class FourLegs:
    def __init__(self, name, age):
        self.name = name
        self.age = age


class TwoOrNoLegs:
    def __init__(self, name, age):
        self.name = name
        self.age = age

# And only the class name and some attributes (normally in a big CSV file)
dc = dict(zip(range(0, 5), [('FourLegs', 'Dog', 11),
                            ('TwoOrNoLegs', 'Chicken', 22),
                            ('FourLegs', 'Cat', 33),
                            ('FourLegs', 'Mice', 44),
                            ('TwoOrNoLegs', 'Snake', 55)]))


# And want to create different objects depending on the given class name
# and attributes an store them in a dict
zoo = {}
for k, v in dc.items():
    an = eval(v[0])
    an.name = v[1]
    an.age = v[2]
    print(an, an.name, an.age)
    zoo[an.name] = an

for k, v in zoo.items():
    print(k, v.name, v.age)

다음을 제공합니다.

<class '__main__.FourLegs'> Dog 11
<class '__main__.TwoOrNoLegs'> Chicken 22
<class '__main__.FourLegs'> Cat 33
<class '__main__.FourLegs'> Mice 44
<class '__main__.TwoOrNoLegs'> Snake 55
Snake Snake 55
Mice Mice 44
Dog Mice 44
Cat Mice 44
Chicken Snake 55

인스턴스의 참조 만 생성하고 사본은 생성하지 않는 (eval ())을 사용하고 있기 때문입니다.

생성하고 싶은 결과 (수동으로 인스턴스를 생성하면 작동 함)는 다음과 같습니다.

<class '__main__.FourLegs'> Dog 11
<class '__main__.TwoOrNoLegs'> Chicken 22
<class '__main__.FourLegs'> Cat 33
<class '__main__.FourLegs'> Mice 44
<class '__main__.TwoOrNoLegs'> Snake 55
Snake Snake 55
Mice Mice 44
Dog Dog 11
Cat Cat 33
Chicken Chicken 22

나는 여기에 정말로 붙어 있었고 모든 힌트에 기뻐합니다!

문자열을 기반으로 동적으로 생성 된 인스턴스에 대해서도이를 달성하는 방법이 있습니까?

Martijn Pieters

인스턴스를 만드는 것이 아니라 클래스에서 직접 속성을 설정하는 것입니다. 매번 동일한 두 클래스의 속성을 변경하므로이 두 클래스 의 속성에 반영된 마지막 값 세트가 표시됩니다.

수업에 전화 하여 이름과 나이를 전달하십시오.

for k, v in dc.items():
    an = eval(v[0])(v[1], v[2])
    print(an, an.name, an.age)
    zoo[an.name] = an

eval()여기서는 사용하지 마십시오 . 클래스를 딕셔너리에 넣고 조회로 사용하거나 globals()딕셔너리를 사용하십시오 (그러나 다른 전역도 호출 할 수 있도록주의하십시오).

classes = {'FourLegs': FourLegs, 'TwoOrNoLegs': TwoOrNoLegs}

for k, v in dc.items():
    clsname, name, age = v
    an = classes[clsname](name, age)
    print(an, an.name, an.age)
    zoo[an.name] = an

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

침해가 발생한 경우 연락 주시기 바랍니다debugcn@gmail.com 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

주어진 클래스 참조에서 동적 개체를 만들고 목록의 값을 추가합니다.

분류에서Dev

iOS 인스턴스를 만들고 다양한 앱 클래스에서 사용하는 가장 좋은 방법

분류에서Dev

클래스 이름에서 클래스 인스턴스를 문자열로 만들고 인수를 전달합니다.

분류에서Dev

Python은 클래스로 함수를 장식하고 클래스 인스턴스에 액세스합니다.

분류에서Dev

스토어를 사용하여 Svelte에서 클래스 인스턴스를 반응 형으로 만들기

분류에서Dev

주어진 식별자를 기반으로 기본 클래스의 새 인스턴스를 만들 수 있습니까?

분류에서Dev

인젝터를 사용하여 이름에서 동적으로 클래스를 인스턴스화합니다.

분류에서Dev

같은 클래스에서 클래스의 인스턴스를 만들면 어떻게됩니까?

분류에서Dev

DryIoc에 등록하지 않고 클래스의 인스턴스를 만들고 종속성을 주입하는 방법은 무엇입니까?

분류에서Dev

텍스트 파일을 읽고 모든 문자를 소문자로 만들고 배열에 저장합니다.

분류에서Dev

열거 형을 식별자로 사용하여 클래스의 다른 인스턴스를 만들려면 어떻게해야합니까?

분류에서Dev

일반 클래스에서 문자열 목록을 만들고 해당 목록에 TrueForAll을 적용합니다.

분류에서Dev

C ++에서 ProgID 만 주어진 클래스를 어떻게 인스턴스화 할 수 있습니까?

분류에서Dev

파이썬은 문자열 조작을 사용하여 클래스의 인스턴스를 만듭니다.

분류에서Dev

주어진 클래스에 숫자를 동적으로 생성

분류에서Dev

주석을 사용하지 않고 동적으로 인스턴스화 된 클래스의 유형을 추론하는 방법은 무엇입니까?

분류에서Dev

DLL에서 클래스를로드하고 다른 클래스 자식으로 인스턴스화합니다.

분류에서Dev

중첩 된 Python 사전에서 가장 깊은 키를 명시 적으로 인스턴스화 할 필요가없는 이유는 무엇입니까?

분류에서Dev

문자열 s에서 주어진 크기 k의 어휘 적으로 가장 작고 가장 큰 부분 문자열을 인쇄합니다.

분류에서Dev

정적 메서드에서 클래스 수준 잠금을 만들고 한 스레드가 실행하면 동일한 클래스의 다른 인스턴스 메서드를 실행하는 다른 스레드를 차단합니까?

분류에서Dev

하스켈에서 어떻게 튜플을이 클래스의 인스턴스로 만들 수 있습니까?

분류에서Dev

클래스 인스턴스를 만들고 동적으로 주입

분류에서Dev

한 번만 인스턴스화되는 클래스에서 정적 변수를 사용해야합니다.

분류에서Dev

정규식은 주어진 문자 클래스에서 하나의 문자 (반복 가능) 만 허용합니다

분류에서Dev

사전에서 클래스 인스턴스를 만드는 Python

분류에서Dev

기존 클래스의 속성으로 새 클래스를 만들 때 파이썬은 어떻게 속성을 인스턴스화합니까?

분류에서Dev

클래스 인스턴스 사전에 객체를 저장하면 예기치 않은 결과가 발생합니다.

분류에서Dev

기본 클래스에서 인스턴스를 만들고 타이핑 유지

분류에서Dev

클래스의 인스턴스에서 문자열을 인수로 전달하고, 문자열을 인수로 취하고 instance.method에 따라 수행하는 메서드를 가져야합니다.

Related 관련 기사

  1. 1

    주어진 클래스 참조에서 동적 개체를 만들고 목록의 값을 추가합니다.

  2. 2

    iOS 인스턴스를 만들고 다양한 앱 클래스에서 사용하는 가장 좋은 방법

  3. 3

    클래스 이름에서 클래스 인스턴스를 문자열로 만들고 인수를 전달합니다.

  4. 4

    Python은 클래스로 함수를 장식하고 클래스 인스턴스에 액세스합니다.

  5. 5

    스토어를 사용하여 Svelte에서 클래스 인스턴스를 반응 형으로 만들기

  6. 6

    주어진 식별자를 기반으로 기본 클래스의 새 인스턴스를 만들 수 있습니까?

  7. 7

    인젝터를 사용하여 이름에서 동적으로 클래스를 인스턴스화합니다.

  8. 8

    같은 클래스에서 클래스의 인스턴스를 만들면 어떻게됩니까?

  9. 9

    DryIoc에 등록하지 않고 클래스의 인스턴스를 만들고 종속성을 주입하는 방법은 무엇입니까?

  10. 10

    텍스트 파일을 읽고 모든 문자를 소문자로 만들고 배열에 저장합니다.

  11. 11

    열거 형을 식별자로 사용하여 클래스의 다른 인스턴스를 만들려면 어떻게해야합니까?

  12. 12

    일반 클래스에서 문자열 목록을 만들고 해당 목록에 TrueForAll을 적용합니다.

  13. 13

    C ++에서 ProgID 만 주어진 클래스를 어떻게 인스턴스화 할 수 있습니까?

  14. 14

    파이썬은 문자열 조작을 사용하여 클래스의 인스턴스를 만듭니다.

  15. 15

    주어진 클래스에 숫자를 동적으로 생성

  16. 16

    주석을 사용하지 않고 동적으로 인스턴스화 된 클래스의 유형을 추론하는 방법은 무엇입니까?

  17. 17

    DLL에서 클래스를로드하고 다른 클래스 자식으로 인스턴스화합니다.

  18. 18

    중첩 된 Python 사전에서 가장 깊은 키를 명시 적으로 인스턴스화 할 필요가없는 이유는 무엇입니까?

  19. 19

    문자열 s에서 주어진 크기 k의 어휘 적으로 가장 작고 가장 큰 부분 문자열을 인쇄합니다.

  20. 20

    정적 메서드에서 클래스 수준 잠금을 만들고 한 스레드가 실행하면 동일한 클래스의 다른 인스턴스 메서드를 실행하는 다른 스레드를 차단합니까?

  21. 21

    하스켈에서 어떻게 튜플을이 클래스의 인스턴스로 만들 수 있습니까?

  22. 22

    클래스 인스턴스를 만들고 동적으로 주입

  23. 23

    한 번만 인스턴스화되는 클래스에서 정적 변수를 사용해야합니다.

  24. 24

    정규식은 주어진 문자 클래스에서 하나의 문자 (반복 가능) 만 허용합니다

  25. 25

    사전에서 클래스 인스턴스를 만드는 Python

  26. 26

    기존 클래스의 속성으로 새 클래스를 만들 때 파이썬은 어떻게 속성을 인스턴스화합니까?

  27. 27

    클래스 인스턴스 사전에 객체를 저장하면 예기치 않은 결과가 발생합니다.

  28. 28

    기본 클래스에서 인스턴스를 만들고 타이핑 유지

  29. 29

    클래스의 인스턴스에서 문자열을 인수로 전달하고, 문자열을 인수로 취하고 instance.method에 따라 수행하는 메서드를 가져야합니다.

뜨겁다태그

보관