Thắc mắc về class trong Python

Như mọi người đã thấy trong đoạn code. E đã dùng cái classmethod return về 4 value chạy 4 cái arg vào class. Nhưng nó báo chỉ có 2. E vẫn chưa hiểu lắm về đoạn này. Không biết 2 đâu ra vì nếu nó không cho return value trả về gán vào biến như 2 dòng chú thích thì cũng chỉ có 1.
Mong mọi người giải đáp.

1 Like

Vì split trả về một list object.
Nên khi truyền vô kia thì nó hiểu cái list ở đây như 1 tham số nên nó hũ lỗi.

1 Like

Vậy có phải là list được tính là 2 args

Sửa thế này:
stud1 = Student(*Student.splitStr(sequence))

* ở đây là dấu unpack arguments, dùng trong lời gọi hàm (khác với dấu gộp arguments trong định nghĩa hàm) sẽ tách cái list mà Student.splitStr trả về ra thành từng argument riêng rẽ.
Viết như bạn thì self + 1 cái list chỉ là 2 tham số truyền vào thôi.

3 Likes

stu1=Student.(*Student.splitStr(sequence))

1 Like

:open_mouth: Vâng, chạy được rồi ạ…e cám ơn :v

1 Like

Lần sau nên nhét code vào markdown nhé, đừng chụp màn hình.

1 Like

vâng vâng ^^ e sẽ lưu ý

anh nói kỹ về cái * được không ạ?

Khi nào thì nó là unpack Arguments, khi nào thì nó gộp các arguments lại thành tuple ạ? :slight_smile: :anguished:

  • Trong lời gọi hàm, * unpack 1 sequence ra thành các argurments bình thường; còn ** unpack 1 dict ra thành keyword arguments.
  • Trong khai báo hàm, * gộp tất cả những arguments bình thường thành 1 tuple, ** gộp tất cả keyword arguments thành 1 dict.
  • Trong Python 3, bạn có thể dùng kết hợp với tuple assignment.

VD:

def foo(*args, **kwargs):
    print(args)  # tuple
    print(kwargs)  # dict

foo(1, 2, 3, a = 4, b = 5)
# args = (1, 2, 3)
# kwargs = {a = 4, b = 5}


def bar(x, y, z, m = 0, n = 0):
    pass

alist = [3, 2, 1]
adict = {n = 5, m = 4}
bar(*alist, **adict)
# x = 3, y = 2, z = 1, m = 4, n = 5


# Python 3, tuple assignment
a, *b, c = 1, 2, 3, 4, 5, 6
# a = 1
# b = [2, 3, 4, 5]
# c = 6

Bạn có thể tham khảo thêm ở đây: http://hangar.runway7.net/python/packing-unpacking-arguments
Nhưng chỗ này vẫn chưa đầy đủ đâu, quyển Learning Python (5th Edition) nói đầy đủ và chi tiết hơn nhiều. Nhưng nó khá dày và nó ở đâu mình quên mất tiêu rồi. :joy: (dù sao, quyển này rất hay và đáng đọc).

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?