30/09/2018, 20:20
Có tồn tại các mức truy cập cho class trong ngôn ngữ python không?
Chào mọi người,
Như tiêu đề thì mình muốn biết có tồn tại các mức truy cập cho class trong ngôn ngữ python.
Lấy ví dụ như ngôn ngữ Javacó các từ khóa để phần quyền truy cập như private, public, protected, …
Bài liên quan
Theo mình biết là trong python không có private thật sự đâu bạn
Có cái idiom thế này:
Hoặc là:
Bạn có thể dùng 2 dấu gạch dưới
__
để dánh dấu nó là private, nhưng mà vẫn có cách để truy cập biến đó nếu bạn thíchVậy thì theo bạn các đặc tính bao đống của hướng đối tượng python còn giữ không?
Mình cũng đã tìm hiểu và nhiều nguồn nói dùng __ để định nghĩa biến private
Kết quả là biến __abc của class vẫn có thể truy cập và sửa đổi. Theo mình nghĩ __ chỉ là cách quy định (code style) những biến nào là biến private.
Cái dòng
obj.__abc = 2
của bạn bản chất nó là tạo ra 1 biến obj.__abc chứ không phải là sử dụng __abc của object, proof: bạn thử bỏ dòngobj.__abc = 2
đi xemThực sự mình cũng đang băn khoăn cái kiểu tạo ra biến mới như này, cơ mà chưa search được
Còn nếu bạn muốn truy cập vào biến đó thì phải dùng
obj._Abc__abc
Vậy nên là tính bao đóng thì mình nghĩ là còn (cho đến khi bạn muốn)
Thanks bạn, nhờ vậy mà mình thấy được kiểu khai báo biến mới này
Với cách truy cập này, mình vẫn có thể sửa, như vậy đâu còn gọi là bao đóng
Có lẽ vậy, thực tế là mình cũng không biết định nghĩa bao đóng nó như nào cơ mà cách truy cập này không được recommend, nên chả ai dùng cả, bạn gõ
obj.__dict__
thì chỉ thấy mấy biến “thông thường” chứ không thấy_Abc_abc__
với cả nếu dùng Pycharm hoặc ipython chẳng hạn, thì sẽ không có auto complete cho_Abc__abc
, và ide luôn có warning nên là không phải lo lắm.