Cách lưu trữ dữ liệu trong lớp trong python

Trong Python, lớp dữ liệu là lớp được thiết kế để chỉ chứa các giá trị dữ liệu. Chúng không khác với các lớp thông thường, nhưng chúng thường không có bất kỳ phương thức nào khác. Chúng thường được sử dụng để lưu trữ thông tin sẽ được chuyển giữa các phần khác nhau của chương trình hoặc hệ thống

Tuy nhiên, khi tạo các lớp chỉ hoạt động như các thùng chứa dữ liệu, việc viết phương thức


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
5 lặp đi lặp lại có thể tạo ra một lượng lớn công việc và các lỗi tiềm ẩn

Mô-đun


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
6, một tính năng được giới thiệu trong Python 3. 7, cung cấp cách tạo các lớp dữ liệu một cách đơn giản hơn mà không cần viết các phương thức.  

Trong bài viết này, chúng ta sẽ xem cách tận dụng mô-đun này để nhanh chóng tạo các lớp mới không chỉ có sẵn với


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
5 mà còn một số phương thức khác đã được triển khai nên chúng ta không cần phải triển khai chúng theo cách thủ công. Ngoài ra, chúng ta có thể làm điều đó chỉ với một vài dòng mã

Chúng tôi mong bạn có một số kinh nghiệm trung cấp về python, bao gồm hiểu biết về cách tạo lớp và lập trình hướng đối tượng nói chung

Sử dụng Mô-đun

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
6

Ví dụ bắt đầu, giả sử chúng ta đang triển khai một lớp để lưu trữ dữ liệu về một nhóm người nhất định. Đối với mỗi người, chúng tôi sẽ có các thuộc tính như tên, tuổi, chiều cao và địa chỉ email. Đây là những gì một lớp học bình thường trông giống như

class Person[]:
    def __init__[self, name, age, height, email]:
        self.name = name
        self.age = age
        self.height = height
        self.email = email

Tuy nhiên, nếu chúng tôi sử dụng mô-đun


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
6, chúng tôi cần nhập
person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
0 để sử dụng nó làm công cụ trang trí trong lớp mà chúng tôi đang tạo. Khi chúng ta làm điều đó, chúng ta không cần phải viết hàm init nữa, chỉ cần xác định các thuộc tính của lớp và các loại của chúng. Đây là cùng một lớp
person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
1, được triển khai theo cách này

________số 8

Chúng ta cũng có thể đặt các giá trị mặc định cho các thuộc tính của lớp

@dataclass
class Person[]:
    name: str = 'Joe'
    age: int = 30
    height: float = 1.85
    email: str = '[email protected]'

print[Person[]]

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
0

Xin nhắc lại, Python không chấp nhận thuộc tính không mặc định sau mặc định trong cả lớp và hàm, vì vậy điều này sẽ gây ra lỗi


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
1

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument

Sau khi lớp được xác định, thật dễ dàng để khởi tạo một đối tượng mới và truy cập các thuộc tính của nó, giống như với một lớp tiêu chuẩn

person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
4

Cho đến nay, chúng tôi đã sử dụng các kiểu dữ liệu thông thường như chuỗi, số nguyên và dấu phẩy động; . Chẳng hạn, hãy thêm thuộc tính

person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
4 vào
person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
1


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
9

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
0

Theo logic tương tự, chúng ta có thể tạo một lớp dữ liệu để chứa nhiều phiên bản của lớp

person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
1

from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
0

Lưu ý rằng thuộc tính

person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
7 trong lớp
person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
8 được định nghĩa là danh sách các thể hiện của lớp
person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
1. Ví dụ: chúng ta có thể khởi tạo một đối tượng của
person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
8 như thế này

from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
1
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
2

Điều này cho phép chúng tôi xác định thuộc tính là bất kỳ loại nào chúng tôi muốn, nhưng cũng là sự kết hợp của các loại dữ liệu

Biểu diễn và So sánh

Như chúng tôi đã đề cập trước đó,

person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
0 không chỉ triển khai phương thức

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
5 mà còn thực hiện một số phương thức khác, bao gồm cả phương thức

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
43. Trong một lớp thông thường, chúng tôi sử dụng phương thức này để hiển thị một đại diện của một đối tượng trong lớp

Chẳng hạn, chúng ta sẽ định nghĩa phương thức như trong ví dụ bên dưới khi chúng ta gọi đối tượng

from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
3
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
4

Tuy nhiên, khi sử dụng

person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
0, không cần phải viết bất kỳ thứ gì trong số đó

from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
5
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
6

Lưu ý rằng không có tất cả mã đó, đầu ra tương đương với mã từ lớp Python tiêu chuẩn

Chúng tôi luôn có thể ghi đè lên nó nếu chúng tôi muốn tùy chỉnh cách biểu diễn của lớp mình

from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
7
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
8

Lưu ý rằng đầu ra của biểu diễn được tùy chỉnh

Khi so sánh, mô-đun


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
6 giúp cuộc sống của chúng ta dễ dàng hơn. Ví dụ: chúng ta có thể so sánh trực tiếp hai thể hiện của một lớp như thế này

from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
9
@dataclass
class Person[]:
    name: str = 'Joe'
    age: int = 30
    height: float = 1.85
    email: str = '[email protected]'

print[Person[]]
0

Lưu ý rằng chúng tôi đã sử dụng các thuộc tính mặc định để làm cho ví dụ ngắn hơn

Trong trường hợp này, phép so sánh hợp lệ vì

person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
0 tạo ra một phương thức

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
47 đằng sau hậu trường, phương thức này thực hiện phép so sánh. Nếu không có decorator, chúng ta phải tự tạo phương thức này

So sánh tương tự sẽ dẫn đến một kết quả khác nếu sử dụng một lớp Python tiêu chuẩn, mặc dù các lớp trên thực tế là bằng nhau

@dataclass
class Person[]:
    name: str = 'Joe'
    age: int = 30
    height: float = 1.85
    email: str = '[email protected]'

print[Person[]]
1
@dataclass
class Person[]:
    name: str = 'Joe'
    age: int = 30
    height: float = 1.85
    email: str = '[email protected]'

print[Person[]]
2

Nếu không sử dụng trình trang trí

person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
0, lớp đó sẽ không kiểm tra xem hai phiên bản có bằng nhau không. Vì vậy, theo mặc định, Python sẽ sử dụng đối tượng

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
49 để so sánh và như chúng ta thấy bên dưới, chúng khác nhau

@dataclass
class Person[]:
    name: str = 'Joe'
    age: int = 30
    height: float = 1.85
    email: str = '[email protected]'

print[Person[]]
3
@dataclass
class Person[]:
    name: str = 'Joe'
    age: int = 30
    height: float = 1.85
    email: str = '[email protected]'

print[Person[]]
4

Tất cả điều này có nghĩa là chúng ta phải viết một phương thức


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
47 để thực hiện phép so sánh này

@dataclass
class Person[]:
    name: str = 'Joe'
    age: int = 30
    height: float = 1.85
    email: str = '[email protected]'

print[Person[]]
5
@dataclass
class Person[]:
    name: str = 'Joe'
    age: int = 30
    height: float = 1.85
    email: str = '[email protected]'

print[Person[]]
0

Bây giờ chúng ta thấy hai đối tượng bằng nhau, nhưng chúng ta phải viết thêm mã để có được kết quả này

Tham số

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
91

Như chúng ta đã thấy ở trên, khi sử dụng trình trang trí

person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
0, các phương thức

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
5,

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
43 và

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
47 được triển khai cho chúng tôi. Việc tạo ra tất cả các phương thức này được thiết lập bởi các tham số

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
96,

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
97 và

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
98 của
person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
0. Ba tham số này là

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
00 theo mặc định. Nếu một trong số chúng được tạo bên trong lớp, thì tham số sẽ bị bỏ qua

Tuy nhiên, chúng tôi có các tham số khác của

person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
0 mà chúng tôi nên xem xét trước khi tiếp tục

  • 
        ---------------------------------------------------------------------------
    
        TypeError                                 Traceback [most recent call last]
    
        ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
              1 @dataclass
        ----> 2 class Person[]:
              3     name: str = 'Joe'
              4     age: int = 30
              5     height: float = 1.85
    
        ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
           1019 
           1020     # We're called as @dataclass without parens.
        -> 1021     return wrap[cls]
           1022 
           1023 
    
        ~\anaconda3\lib\dataclasses.py in wrap[cls]
           1011 
           1012     def wrap[cls]:
        -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
           1014 
           1015     # See if we're being called as @dataclass or @dataclass[].
    
        ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
            925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
            926         _set_new_attribute[cls, '__init__',
        --> 927                            _init_fn[flds,
            928                                     frozen,
            929                                     has_post_init,
    
        ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
            502                 seen_default = True
            503             elif seen_default:
        --> 504                 raise TypeError[f'non-default argument {f.name!r} '
            505                                 'follows default argument']
            506 
    
        TypeError: non-default argument 'email' follows default argument
    02. cho phép sắp xếp lớp như chúng ta sẽ thấy trong phần tiếp theo. Mặc định là
    
        ---------------------------------------------------------------------------
    
        TypeError                                 Traceback [most recent call last]
    
        ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
              1 @dataclass
        ----> 2 class Person[]:
              3     name: str = 'Joe'
              4     age: int = 30
              5     height: float = 1.85
    
        ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
           1019 
           1020     # We're called as @dataclass without parens.
        -> 1021     return wrap[cls]
           1022 
           1023 
    
        ~\anaconda3\lib\dataclasses.py in wrap[cls]
           1011 
           1012     def wrap[cls]:
        -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
           1014 
           1015     # See if we're being called as @dataclass or @dataclass[].
    
        ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
            925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
            926         _set_new_attribute[cls, '__init__',
        --> 927                            _init_fn[flds,
            928                                     frozen,
            929                                     has_post_init,
    
        ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
            502                 seen_default = True
            503             elif seen_default:
        --> 504                 raise TypeError[f'non-default argument {f.name!r} '
            505                                 'follows default argument']
            506 
    
        TypeError: non-default argument 'email' follows default argument
    03
  • 
        ---------------------------------------------------------------------------
    
        TypeError                                 Traceback [most recent call last]
    
        ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
              1 @dataclass
        ----> 2 class Person[]:
              3     name: str = 'Joe'
              4     age: int = 30
              5     height: float = 1.85
    
        ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
           1019 
           1020     # We're called as @dataclass without parens.
        -> 1021     return wrap[cls]
           1022 
           1023 
    
        ~\anaconda3\lib\dataclasses.py in wrap[cls]
           1011 
           1012     def wrap[cls]:
        -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
           1014 
           1015     # See if we're being called as @dataclass or @dataclass[].
    
        ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
            925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
            926         _set_new_attribute[cls, '__init__',
        --> 927                            _init_fn[flds,
            928                                     frozen,
            929                                     has_post_init,
    
        ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
            502                 seen_default = True
            503             elif seen_default:
        --> 504                 raise TypeError[f'non-default argument {f.name!r} '
            505                                 'follows default argument']
            506 
    
        TypeError: non-default argument 'email' follows default argument
    04. Khi
    
        ---------------------------------------------------------------------------
    
        TypeError                                 Traceback [most recent call last]
    
        ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
              1 @dataclass
        ----> 2 class Person[]:
              3     name: str = 'Joe'
              4     age: int = 30
              5     height: float = 1.85
    
        ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
           1019 
           1020     # We're called as @dataclass without parens.
        -> 1021     return wrap[cls]
           1022 
           1023 
    
        ~\anaconda3\lib\dataclasses.py in wrap[cls]
           1011 
           1012     def wrap[cls]:
        -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
           1014 
           1015     # See if we're being called as @dataclass or @dataclass[].
    
        ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
            925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
            926         _set_new_attribute[cls, '__init__',
        --> 927                            _init_fn[flds,
            928                                     frozen,
            929                                     has_post_init,
    
        ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
            502                 seen_default = True
            503             elif seen_default:
        --> 504                 raise TypeError[f'non-default argument {f.name!r} '
            505                                 'follows default argument']
            506 
    
        TypeError: non-default argument 'email' follows default argument
    00, các giá trị bên trong thể hiện của lớp không thể được sửa đổi sau khi nó được tạo. Mặc định là
    
        ---------------------------------------------------------------------------
    
        TypeError                                 Traceback [most recent call last]
    
        ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
              1 @dataclass
        ----> 2 class Person[]:
              3     name: str = 'Joe'
              4     age: int = 30
              5     height: float = 1.85
    
        ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
           1019 
           1020     # We're called as @dataclass without parens.
        -> 1021     return wrap[cls]
           1022 
           1023 
    
        ~\anaconda3\lib\dataclasses.py in wrap[cls]
           1011 
           1012     def wrap[cls]:
        -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
           1014 
           1015     # See if we're being called as @dataclass or @dataclass[].
    
        ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
            925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
            926         _set_new_attribute[cls, '__init__',
        --> 927                            _init_fn[flds,
            928                                     frozen,
            929                                     has_post_init,
    
        ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
            502                 seen_default = True
            503             elif seen_default:
        --> 504                 raise TypeError[f'non-default argument {f.name!r} '
            505                                 'follows default argument']
            506 
    
        TypeError: non-default argument 'email' follows default argument
    03

Có một vài phương pháp khác mà bạn có thể kiểm tra trong tài liệu

Sắp xếp

Khi làm việc với dữ liệu, chúng ta thường cần sắp xếp các giá trị. Trong kịch bản của chúng tôi, chúng tôi có thể muốn sắp xếp những người khác nhau dựa trên một số thuộc tính. Đối với điều đó, chúng tôi sẽ sử dụng tham số


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
02 của trình trang trí
person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
0 được đề cập ở trên, cho phép sắp xếp trong lớp

@dataclass
class Person[]:
    name: str = 'Joe'
    age: int = 30
    height: float = 1.85
    email: str = '[email protected]'

print[Person[]]
7

Khi tham số


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
02 được đặt thành

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
00, nó sẽ tự động tạo các phương thức
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
01 [nhỏ hơn],
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
02 [nhỏ hơn hoặc bằng],
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
03 [lớn hơn] và
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
04 [lớn hơn hoặc bằng] được sử dụng để sắp xếp

Hãy khởi tạo các đối tượng

from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
05 và
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
06 của chúng ta để xem liệu cái này có lớn hơn cái kia không

@dataclass
class Person[]:
    name: str = 'Joe'
    age: int = 30
    height: float = 1.85
    email: str = '[email protected]'

print[Person[]]
8
@dataclass
class Person[]:
    name: str = 'Joe'
    age: int = 30
    height: float = 1.85
    email: str = '[email protected]'

print[Person[]]
2

Python cho chúng ta biết rằng

from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
05 không lớn hơn
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
06, nhưng dựa trên tiêu chí nào?


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
00
@dataclass
class Person[]:
    name: str = 'Joe'
    age: int = 30
    height: float = 1.85
    email: str = '[email protected]'

print[Person[]]
2

Vì chữ "J" đứng trước chữ "M", nó nói là

from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
09. Nếu các tên giống nhau, nó sẽ chuyển sang phần tử tiếp theo trong mỗi bộ. Như vậy, nó đang so sánh các đối tượng theo thứ tự bảng chữ cái. Mặc dù điều đó có thể có ý nghĩa tùy thuộc vào vấn đề mà chúng ta đang xử lý, nhưng chúng ta muốn có thể kiểm soát cách các đối tượng sẽ được sắp xếp

Để đạt được điều đó, chúng ta sẽ tận dụng hai tính năng khác của mô-đun


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
6

Đầu tiên là hàm

from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
11. Hàm này được sử dụng để tùy chỉnh một thuộc tính của một lớp dữ liệu riêng lẻ, cho phép chúng ta xác định các thuộc tính mới sẽ phụ thuộc vào một thuộc tính khác và sẽ chỉ được tạo sau khi đối tượng được khởi tạo

Trong vấn đề sắp xếp của chúng tôi, chúng tôi sẽ sử dụng

from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
11 để tạo thuộc tính
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
13 trong lớp của chúng tôi. Thuộc tính này chỉ có thể được tạo sau khi đối tượng được khởi tạo và là thứ mà

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
6 sử dụng để sắp xếp


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
02

Hai đối số mà chúng tôi đã thông qua là


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
03 nói rằng thuộc tính này không có trong

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
5 và nó sẽ không được hiển thị khi chúng tôi gọi

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
43. Có các tham số khác trong hàm
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
11 mà bạn có thể kiểm tra trong tài liệu

Sau khi chúng tôi đã tham chiếu thuộc tính mới này, chúng tôi sẽ sử dụng công cụ mới thứ hai. phương pháp

from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
19. Đúng như tên gọi, phương thức này được thực thi ngay sau phương thức

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
5. Chúng tôi sẽ sử dụng
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
19 để xác định
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
13, ngay sau khi tạo đối tượng. Ví dụ: giả sử chúng tôi muốn so sánh mọi người dựa trên tuổi của họ. Đây là cách


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
03

Nếu chúng ta so sánh tương tự, chúng ta biết rằng Joe trẻ hơn Mary

@dataclass
class Person[]:
    name: str = 'Joe'
    age: int = 30
    height: float = 1.85
    email: str = '[email protected]'

print[Person[]]
8
@dataclass
class Person[]:
    name: str = 'Joe'
    age: int = 30
    height: float = 1.85
    email: str = '[email protected]'

print[Person[]]
2

Nếu chúng tôi muốn sắp xếp mọi người theo chiều cao, chúng tôi sẽ sử dụng mã này


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
06
@dataclass
class Person[]:
    name: str = 'Joe'
    age: int = 30
    height: float = 1.85
    email: str = '[email protected]'

print[Person[]]
0

Joe cao hơn Mary. Lưu ý rằng chúng tôi đặt

from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
13 là một
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
24

Chúng tôi có thể triển khai sắp xếp trong lớp dữ liệu của mình mà không cần phải viết nhiều phương thức

Làm việc với các lớp dữ liệu bất biến

Một tham số khác của


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
91 mà chúng tôi đã đề cập ở trên là

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
04. Khi được đặt thành

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
00,

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
04 không cho phép chúng tôi sửa đổi các thuộc tính của một đối tượng sau khi nó được tạo

Với

from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
29, chúng ta có thể dễ dàng thực hiện việc sửa đổi đó


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
08

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
09

Chúng tôi đã tạo một đối tượng

person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
1 và sau đó sửa đổi thuộc tính
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
31 mà không gặp bất kỳ sự cố nào

Tuy nhiên, khi được đặt thành


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
00, mọi nỗ lực sửa đổi đối tượng đều gây ra lỗi


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
10

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
11

Lưu ý rằng thông báo lỗi nêu rõ

from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
33

Có một thủ thuật có thể sửa đổi giá trị của lớp dữ liệu bất biến. Nếu lớp của chúng ta chứa thuộc tính có thể thay đổi, thì thuộc tính này có thể thay đổi ngay cả khi lớp bị đóng băng. Điều này có vẻ như không có ý nghĩa gì, nhưng hãy xem một ví dụ

Hãy nhớ lại lớp

person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
8 mà chúng ta đã tạo trước đó trong bài viết này, nhưng bây giờ hãy làm cho nó trở nên bất biến


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
12

Sau đó, chúng tôi tạo hai phiên bản của lớp

person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
1 và sử dụng chúng để tạo một phiên bản của
person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
8 mà chúng tôi sẽ đặt tên là
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
37


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
13

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
14

Thuộc tính

person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
7 trong lớp
person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
8 là một danh sách. Chúng ta có thể dễ dàng truy cập các giá trị trong danh sách này trong đối tượng
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
37


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
15
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
6

Vì vậy, mặc dù cả hai lớp

person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
1 và
person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
8 đều là bất biến, nhưng danh sách thì không, có nghĩa là chúng ta có thể thay đổi các giá trị trong đó


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
17

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
09

Lưu ý rằng tuổi bây giờ là 35

Chúng tôi đã không thay đổi các thuộc tính của bất kỳ đối tượng nào trong các lớp bất biến, nhưng chúng tôi đã thay thế phần tử đầu tiên của danh sách bằng một đối tượng khác và danh sách có thể thay đổi

Hãy nhớ rằng tất cả các thuộc tính của lớp cũng phải là bất biến để làm việc an toàn với các lớp dữ liệu bất biến

Thừa kế với

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
6

Mô-đun


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
6 cũng hỗ trợ tính kế thừa, nghĩa là chúng ta có thể tạo một lớp dữ liệu sử dụng các thuộc tính của một lớp dữ liệu khác. Vẫn sử dụng lớp
person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
1 của chúng tôi, chúng tôi sẽ tạo một lớp
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
46 mới kế thừa tất cả các thuộc tính từ
person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
1.
Vậy ta có
person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
1.

@dataclass
class Person[]:
    name: str = 'Joe'
    age: int = 30
    height: float = 1.85
    email: str = '[email protected]'

print[Person[]]
7

Và lớp

from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
46 mới


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
0

Bây giờ chúng ta có thể tạo một đối tượng của lớp

from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
46 bằng cách sử dụng tất cả các thuộc tính của lớp
person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
1


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
1

    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
2

Từ giờ trở đi, chúng ta cũng có thể sử dụng mọi thứ chúng ta đã thấy trong bài viết này trong lớp

from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
46

Lưu ý các thuộc tính mặc định. Giả sử chúng ta có các thuộc tính mặc định trong

person = Person['Joe', 25, 1.85, '[email protected]']
print[person.name]
1, nhưng không có trong
from dataclasses import dataclass

@dataclass
class Person[]:
    name: str
    age: int
    height: float
    email: str
46. Kịch bản này, như trong đoạn mã dưới đây, gây ra lỗi


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
3____04

Nếu lớp cơ sở có các thuộc tính mặc định thì tất cả các thuộc tính trong lớp dẫn xuất từ ​​nó cũng phải có các giá trị mặc định

Sự kết luận

Trong bài viết này, chúng ta đã thấy mô-đun


    ---------------------------------------------------------------------------

    TypeError                                 Traceback [most recent call last]

    ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
          1 @dataclass
    ----> 2 class Person[]:
          3     name: str = 'Joe'
          4     age: int = 30
          5     height: float = 1.85

    ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
       1019 
       1020     # We're called as @dataclass without parens.
    -> 1021     return wrap[cls]
       1022 
       1023 

    ~\anaconda3\lib\dataclasses.py in wrap[cls]
       1011 
       1012     def wrap[cls]:
    -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
       1014 
       1015     # See if we're being called as @dataclass or @dataclass[].

    ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
        925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
        926         _set_new_attribute[cls, '__init__',
    --> 927                            _init_fn[flds,
        928                                     frozen,
        929                                     has_post_init,

    ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
        502                 seen_default = True
        503             elif seen_default:
    --> 504                 raise TypeError[f'non-default argument {f.name!r} '
        505                                 'follows default argument']
        506 

    TypeError: non-default argument 'email' follows default argument
6 là một công cụ rất mạnh để tạo các lớp dữ liệu một cách nhanh chóng, trực quan như thế nào. Mặc dù chúng ta đã thấy rất nhiều điều trong bài viết này, nhưng mô-đun này chứa nhiều công cụ hơn và luôn có nhiều điều hơn để tìm hiểu về nó

Cho đến nay, chúng tôi đã học được cách

  • Xác định một lớp bằng cách sử dụng

    
        ---------------------------------------------------------------------------
    
        TypeError                                 Traceback [most recent call last]
    
        ~\AppData\Local\Temp/ipykernel_5540/741473360.py in 
              1 @dataclass
        ----> 2 class Person[]:
              3     name: str = 'Joe'
              4     age: int = 30
              5     height: float = 1.85
    
        ~\anaconda3\lib\dataclasses.py in dataclass[cls, init, repr, eq, order, unsafe_hash, frozen]
           1019 
           1020     # We're called as @dataclass without parens.
        -> 1021     return wrap[cls]
           1022 
           1023 
    
        ~\anaconda3\lib\dataclasses.py in wrap[cls]
           1011 
           1012     def wrap[cls]:
        -> 1013         return _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
           1014 
           1015     # See if we're being called as @dataclass or @dataclass[].
    
        ~\anaconda3\lib\dataclasses.py in _process_class[cls, init, repr, eq, order, unsafe_hash, frozen]
            925                 if f._field_type in [_FIELD, _FIELD_INITVAR]]
            926         _set_new_attribute[cls, '__init__',
        --> 927                            _init_fn[flds,
            928                                     frozen,
            929                                     has_post_init,
    
        ~\anaconda3\lib\dataclasses.py in _init_fn[fields, frozen, has_post_init, self_name, globals]
            502                 seen_default = True
            503             elif seen_default:
        --> 504                 raise TypeError[f'non-default argument {f.name!r} '
            505                                 'follows default argument']
            506 
    
        TypeError: non-default argument 'email' follows default argument
    6

  • Sử dụng các thuộc tính mặc định và quy tắc của chúng

  • Tạo phương thức biểu diễn

  • So sánh các lớp dữ liệu

  • Sắp xếp các lớp dữ liệu

  • Sử dụng tính kế thừa với các lớp dữ liệu

  • Làm việc với các lớp dữ liệu bất biến

Data SciencepythonHướng dẫn

Thông tin về các Tác giả

Otávio Simões Silveira

Otávio là một nhà kinh tế và nhà khoa học dữ liệu đến từ Brazil. Khi rảnh rỗi, anh ấy viết về Python và Khoa học dữ liệu trên internet. Bạn có thể tìm thấy anh ấy tại LinkedIn

@dataclass trong Python là gì?

Một lớp dữ liệu là một lớp thường chứa chủ yếu là dữ liệu , mặc dù thực sự không có bất kỳ hạn chế nào. Nó được tạo bằng trình trang trí @dataclass mới, như sau. từ lớp dữ liệu nhập lớp dữ liệu @dataclass lớp DataClassCard. thứ hạng. phù hợp với str. str.

Làm cách nào để lưu dữ liệu trên Python?

Nhấp chuột phải vào cửa sổ Python và chọn Lưu dưới dạng để lưu mã của bạn dưới dạng tệp Python [. py] hoặc tệp Văn bản [. txt]. Nếu lưu vào tệp Python, chỉ có mã Python sẽ được lưu.

Các lớp chứa trong Python là gì?

Các bộ chứa tích hợp cốt lõi trong Python là danh sách, bộ dữ liệu, từ điển và bộ. .
danh sách. một loại chuỗi có thể thay đổi, giữ một tập hợp các đối tượng theo một thứ tự xác định [được lập chỉ mục bởi các số nguyên]
tuple. một loại chuỗi bất biến, giữ một tập hợp các đối tượng theo một thứ tự xác định [được lập chỉ mục bởi các số nguyên]

một lớp dữ liệu là gì?

Một lớp dữ liệu đề cập đến một lớp chỉ chứa các trường và phương thức thô để truy cập chúng [getters và setters]. Đây chỉ đơn giản là các thùng chứa dữ liệu được sử dụng bởi các lớp khác. Các lớp này không chứa bất kỳ chức năng bổ sung nào và không thể hoạt động độc lập trên dữ liệu mà chúng sở hữu.

Chủ Đề