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, …

Thành Phạm viết 22:26 ngày 30/09/2018

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:

We are all adults. Feel free to shoot yourself in the foot if you must. (hình như ông Guido nói thì phải )

Hoặc là:

ok, kids, wait 'til you grow up to drink, smoke and access private variables

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ích

Tung Dao viết 22:20 ngày 30/09/2018

Vậ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

class Abc():
    __abc = 1

obj = Abc()
obj.__abc = 2
print obj.__abc

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.

Thành Phạm viết 22:35 ngày 30/09/2018

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òng obj.__abc = 2 đi xem

Thự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)

Tung Dao viết 22:33 ngày 30/09/2018

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òng obj.__abc = 2 đi xem

Thự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

Thanks bạn, nhờ vậy mà mình thấy được kiểu khai báo biến mới này

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)

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

Thành Phạm viết 22:35 ngày 30/09/2018

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.

Bài liên quan
0