Hướng dẫn python types simplenamespace - python loại simplenamespace

Sau đây dường như hoạt động một trong hai cách. Lợi thế (trừ repr tốt đẹp) của việc sử dụng

class SimpleNamespace:
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

    def __repr__(self):
        keys = sorted(self.__dict__)
        items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
        return "{}({})".format(type(self).__name__, ", ".join(items))

    def __eq__(self, other):
        return self.__dict__ == other.__dict__
0 là gì? Hay đó là điều tương tự?

>>> import types
>>> class Cls():
...     pass
... 
>>> foo = types.SimpleNamespace() # or foo = Cls()
>>> foo.bar = 42
>>> foo.bar
42
>>> del foo.bar
>>> foo.bar
AttributeError: 'types.SimpleNamespace' object has no attribute 'bar'

Khi được hỏi ngày 11 tháng 5 năm 2016 lúc 11:28May 11, 2016 at 11:28

BaruchbaruchBaruch

Huy hiệu vàng 19.6K2323 gold badges123 silver badges195 bronze badges

0

Điều này được giải thích khá tốt trong các loại mô tả mô -đun. Nó cho bạn thấy rằng

class SimpleNamespace:
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

    def __repr__(self):
        keys = sorted(self.__dict__)
        items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
        return "{}({})".format(type(self).__name__, ", ".join(items))

    def __eq__(self, other):
        return self.__dict__ == other.__dict__
0 gần tương đương với điều này:

class SimpleNamespace:
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

    def __repr__(self):
        keys = sorted(self.__dict__)
        items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
        return "{}({})".format(type(self).__name__, ", ".join(items))

    def __eq__(self, other):
        return self.__dict__ == other.__dict__

Điều này cung cấp các lợi thế sau so với một lớp trống:

  1. Nó cho phép bạn khởi tạo các thuộc tính trong khi xây dựng đối tượng:
    class SimpleNamespace:
        def __init__(self, **kwargs):
            self.__dict__.update(kwargs)
    
        def __repr__(self):
            keys = sorted(self.__dict__)
            items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
            return "{}({})".format(type(self).__name__, ", ".join(items))
    
        def __eq__(self, other):
            return self.__dict__ == other.__dict__
    
    2
  2. Nó cung cấp một
    class SimpleNamespace:
        def __init__(self, **kwargs):
            self.__dict__.update(kwargs)
    
        def __repr__(self):
            keys = sorted(self.__dict__)
            items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
            return "{}({})".format(type(self).__name__, ", ".join(items))
    
        def __eq__(self, other):
            return self.__dict__ == other.__dict__
    
    3 có thể đọc được:
    class SimpleNamespace:
        def __init__(self, **kwargs):
            self.__dict__.update(kwargs)
    
        def __repr__(self):
            keys = sorted(self.__dict__)
            items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
            return "{}({})".format(type(self).__name__, ", ".join(items))
    
        def __eq__(self, other):
            return self.__dict__ == other.__dict__
    
    4
  3. Nó ghi đè so sánh mặc định. Thay vì so sánh với
    class SimpleNamespace:
        def __init__(self, **kwargs):
            self.__dict__.update(kwargs)
    
        def __repr__(self):
            keys = sorted(self.__dict__)
            items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
            return "{}({})".format(type(self).__name__, ", ".join(items))
    
        def __eq__(self, other):
            return self.__dict__ == other.__dict__
    
    5, nó so sánh các giá trị thuộc tính thay thế.

Hướng dẫn python types simplenamespace - python loại simplenamespace

Martineau

Huy hiệu vàng 115K2525 gold badges160 silver badges282 bronze badges

Đã trả lời ngày 11 tháng 5 năm 2016 lúc 11:33May 11, 2016 at 11:33

9

Một

class SimpleNamespace:
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

    def __repr__(self):
        keys = sorted(self.__dict__)
        items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
        return "{}({})".format(type(self).__name__, ", ".join(items))

    def __eq__(self, other):
        return self.__dict__ == other.__dict__
6 cung cấp một cơ chế để khởi tạo một đối tượng có thể giữ các thuộc tính và không có gì khác. Trên thực tế, nó là một lớp trống với fancier
class SimpleNamespace:
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

    def __repr__(self):
        keys = sorted(self.__dict__)
        items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
        return "{}({})".format(type(self).__name__, ", ".join(items))

    def __eq__(self, other):
        return self.__dict__ == other.__dict__
7 và một
class SimpleNamespace:
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

    def __repr__(self):
        keys = sorted(self.__dict__)
        items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
        return "{}({})".format(type(self).__name__, ", ".join(items))

    def __eq__(self, other):
        return self.__dict__ == other.__dict__
8 hữu ích:

>>> from types import SimpleNamespace
>>> sn = SimpleNamespace(x = 1, y = 2)
>>> sn
namespace(x=1, y=2)
>>> sn.z = 'foo'
>>> del(sn.x)
>>> sn
namespace(y=2, z='foo')

hoặc

from types import SimpleNamespace

sn = SimpleNamespace(x = 1, y = 2)
print(sn)

sn.z = 'foo'
del(sn.x)
print(sn)

output:

namespace(x=1, y=2)
namespace(y=2, z='foo')

Câu trả lời này cũng có thể hữu ích.

Đã trả lời ngày 5 tháng 2 năm 2021 lúc 14:12Feb 5, 2021 at 14:12

Không phải là câu trả lời bạn đang tìm kiếm? Duyệt các câu hỏi khác được gắn thẻ Python Python-3.x hoặc đặt câu hỏi của riêng bạn.

Bạn Có Thể TạO

class Namespace:
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

Và Nó Sẽ Hoạt Động Theo Cách Gir

>>> args = Namespace(a=1, b='c')
>>> args.a
1
>>> args.b
'c'

NGOÀi RA, Chỉ Cần NHập lớp; nó bạn sẵn từ ________ 19mô-ệun:

from argparse import Namespace

args = Namespace(a=1, b='c')

ĐốI VớI Python 3.3, Cũng Có

class SimpleNamespace:
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

    def __repr__(self):
        keys = sorted(self.__dict__)
        items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
        return "{}({})".format(type(self).__name__, ", ".join(items))

    def __eq__(self, other):
        return self.__dict__ == other.__dict__
0, về

>>> from types import SimpleNamespace
>>> args = SimpleNamespace(a=1, b='c')
>>> args.a
1
>>> args.b
'c'

Hai loại là Khác biệt; ________ 23được sử dụng chủ yếu Cho ________ 24thuộc tính và Giá trị trả về của

>>> from types import SimpleNamespace
>>> sn = SimpleNamespace(x = 1, y = 2)
>>> sn
namespace(x=1, y=2)
>>> sn.z = 'foo'
>>> del(sn.x)
>>> sn
namespace(y=2, z='foo')
5.

Vì vậy, sánh thính:

  • Cả hai lớp Đều hỗ trợ kiểm tra bình đẳng; Đối với hai trường hợp của cùnm một lớp, ________ 26là đúng nếu chún đó
  • Cả Hai lớp Đều Hữu Ích ________ 27 Để Hiển thị NHững Thuộc Tính Mà Chúng Có.
  • ________ 28đối tượng hỗ trợ kiểm trarăn chặn; ________ 29là Đúng nếu Cá thể Không Gian Tên Có Tên Thuộc Tính
    from types import SimpleNamespace
    
    sn = SimpleNamespace(x = 1, y = 2)
    print(sn)
    
    sn.z = 'foo'
    del(sn.x)
    print(sn)
    
    0. ________ 23không lào.
  • ________ 28các Đối tượng đó là Một Bạn Có Thể NHậN ĐượC NHư Nhau Cho Một Trong Hai LớP Bằng Cách Sử Dụng
    from types import SimpleNamespace
    
    sn = SimpleNamespace(x = 1, y = 2)
    print(sn)
    
    sn.z = 'foo'
    del(sn.x)
    print(sn)
    
    5.
  • Mặc dù ________ 36đc triển Khai bằng c và ________ 28đc triển Khai bằng python Kiểm tra tính bình đẳng và tạo ra biểu diễn nhanh hơn một chút đối với c g

142 HữU não 2 Bình Luận Chia Sẻ 2 bình luận chia sẻ