01/10/2018, 08:53

Thắc mắc về kiểu dữ liệu động trong Python

Chào mọi người, mình đang học Python. Về kiểu dữ liệu trong Python, mình có một vài thắc mắc, mong các bạn giải đáp:

  1. Làm cách nào để có thể tạo ra một kiểu dữ liệu người dùng định nghĩa tương tự như Struct trong C++ hoặc C# ?
  2. Vì Python là ngôn ngữ kiểu động, nên khi truyền tham số vào hàm, ta không cần xác định kiểu của tham số. Vậy với trường hợp kiểu người dùng tự định nghĩa hay các kiểu dữ liệu ta import từ các module khác, cơ chế nào để Python biết được tham số đó thuộc kiểu gì và các thuộc tính của nó ?
    Cảm ơn mọi người
Khoa NTA viết 11:04 ngày 01/10/2018
  1. Bạn có thể dùng class trong Python để làm điều này:
# python2
class Book:
    name   = str()
    author = str()
    price  = 0
    currency = str()
# 
# create an array of structs with _n members
def create_array_structs(_class,  _n):
    _as = list()
    for i in xrange(_n):
        _as.append(_class())
    return _as
#
# demo:
#  create an array with 5 structs of Book
books = create_array_structs(Book, 5)
books[0].name   = "Python"
books[0].author = "Guido van Rossum"
books[0].price  = 0
books[0].currency = "USD"
# books[1]...
#...

2 . Mình không chắc là giải thích cho bạn hiểu được (vì mình cũng “sơ sơ” thôi). Tốt nhất là tải mã nguồn Python về tham khảo.

Nguyễn Quốc Thắng viết 11:05 ngày 01/10/2018

Mình hiếu ý của bạn là tạo một class Book, sau đó set tất cả các thuộc tính với phương thức thành public? À mà tại sao tên tham số truyền vào của bạn lại có “_” phía trước, có ý nghĩa gì đặc biệt không ?

Khoa NTA viết 11:03 ngày 01/10/2018

Tất thành phần trong class Python đều public mà, tuy là có cách “giấu” biến nhưng nó vẫn là public (truy cập thông qua 1 cách khác)
Còn tên tham số có có dấu “_” phía trước là vì mình thích đặt vậy nếu để chữ “class” hay “as” thì trùng với từ khóa (mình cũng muốn nhấn mạnh: tham số truyền vào là class, không phải instance hay bất kỳ thứ gì khác), mình cũng tự quy ước với bản thân cho cách đặt tên biến và tên hàm đó mà (quen tay với C rồi, chưa quên OOP nó vậy ).

Bài liên quan
0