Python에서 빈 개체 만들기
Python에서 빈 개체를 정의하기 위한 바로 가기가 있습니까? 아니면 항상 사용자 지정 빈 클래스의 인스턴스를 만들어야 합니까?
편집: 오리 타이핑에 사용할 수 있는 빈 개체를 의미합니다.
예, Python 3.3에서 SimpleNamespace가 추가되었습니다.
개체와 달리 SimpleNamespace를 사용하면 속성을 추가하거나 제거할 수 있습니다.SimpleNamespace 개체가 키워드 인수를 사용하여 초기화된 경우 키워드 인수는 기본 네임스페이스에 직접 추가됩니다.
예:
import types
x = types.SimpleNamespace()
x.happy = True
print(x.happy) # True
del x.happy
print(x.happy) # AttributeError. object has no attribute 'happy'
유형을 사용하여 새 클래스를 즉시 만든 다음 인스턴스화할 수 있습니다.이와 같은 경우:
>>> t = type('test', (object,), {})()
>>> t
<__main__.test at 0xb615930c>
입력할 인수는 클래스 이름, 기본 클래스 튜플 및 개체의 사전입니다.함수(개체의 메서드) 또는 속성을 포함할 수 있습니다.
실제로 첫 번째 줄을 줄여서 다음과 같이 할 수 있습니다.
>>> t = type('test', (), {})()
>>> t.__class__.__bases__
(object,)
기본적으로 유형은 객체에서 상속되는 새 스타일 클래스를 만들기 때문입니다.
type
메타프로그래밍을 위해 파이썬에서 사용됩니다.
하지만 만약 당신이 단지 객체의 인스턴스를 만들고 싶다면요.그런 다음 인스턴스를 만듭니다.레즐롯이 제안하는 것처럼.
이와 같은 새 클래스의 인스턴스를 만드는 것은 유용할 수 있는 중요한 차이점이 있습니다.
>>> a = object()
>>> a.whoops = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'whoops'
다음과 같은 경우:
>>> b = type('', (), {})()
>>> b.this_works = 'cool'
>>>
빈(-ish) 객체를 만드는 간단하고 덜 무서워 보이는 한 가지 방법은 함수가 람다 함수를 포함하여 Python의 객체라는 사실을 이용하는 것입니다.
obj = lambda: None
obj.test = "Hello, world!"
예:
In [18]: x = lambda: None
In [19]: x.test = "Hello, world!"
In [20]: x.test
Out[20]: 'Hello, world!'
질문에서 말씀하셨지만 코드로 언급한 답변이 없었기 때문에 이것은 아마도 가장 깨끗한 해결책 중 하나일 것입니다.
class Myobject:
pass
x = Myobject()
x.test = "Hello, world!" # working
"빈 물체"가 무슨 뜻입니까?클래스 인스턴스object
간단히 실행할 수 있습니다.
a = object()
아니면 null 참조에 대한 초기화를 의미하는 것일 수도 있습니다.그러면 사용할 수 있습니다.
a = None
제안된 모든 해결책은 다소 어색합니다.
저는 촌스럽지 않고 원래 디자인대로 하는 방법을 찾았습니다.
>>> from mock import Mock
>>> foo = Mock(spec=['foo'], foo='foo')
>>> foo.foo
'foo'
>>> foo.bar
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/.../virtualenv/local/lib/python2.7/site-packages/mock/mock.py", line 698, in __getattr__
raise AttributeError("Mock object has no attribute %r" % name)
AttributeError: Mock object has no attribute 'bar'
여기에서 unittest.mock의 설명서를 참조하십시오.
사용할 수 있습니다.
x = lambda: [p for p in x.__dict__.keys()]
그리고나서
x.p1 = 2
x.p2 = "Another property"
끝나고
x()
# gives
# ['p1', 'p2']
그리고.
[(p, getattr(x,p)) for p in x()]
# gives
# [('p1', 2), ('p2', 'Another property')]
빈 집합 개체를 새로 구성합니다.선택적 반복 가능 매개 변수가 제공되면 반복에서 얻은 요소로 집합을 업데이트합니다.시작할 수 있는 모든 요소는 불변이거나 불변으로 자동 변환하기 위해 프로토콜 섹션에 설명된 프로토콜을 사용하여 불변으로 변환할 수 있어야 합니다.
예:
myobj = set()
for i in range(1,10): myobj.add(i)
print(myobj)
제 생각에, 가장 쉬운 방법은 다음과 같습니다.
def x():pass
x.test = 'Hello, world!'
빈 유형이 빈 개체를 는유빈있는경우개가체다다, 개않호습니지출하싶지만만들고체를해말시원하라고 __init__
이니셜라이저, 사용할 수 있습니다.__new__
:
class String(object):
...
uninitialized_empty_string = String.__new__(String)
출처: https://stackoverflow.com/a/2169191/6639500 .
언급URL : https://stackoverflow.com/questions/19476816/creating-an-empty-object-in-python
'bestsource' 카테고리의 다른 글
Android에서 단말기의 SMS 메시지를 프로그래밍 방식으로 읽는 방법은 무엇입니까? (0) | 2023.08.27 |
---|---|
범위를 쉼표로 구분된 문자열로 변환 (0) | 2023.08.22 |
매개 변수와 함께 또는 매개 변수 없이 사용할 수 있는 장식기를 만드는 방법은 무엇입니까? (0) | 2023.08.22 |
로컬 리포지토리를 원격 리포지토리에 연결 (0) | 2023.08.22 |
스크립트와 실행 파일 앞에 ".\"가 와야 하는 PowerShell 요구 사항을 제거하려면 어떻게 해야 합니까? (0) | 2023.08.22 |