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

1 Like

Theo mình biết là trong python không có private thật sự đâu bạn :smile:

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 :thinking: )

Hoặc là:

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

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 :smile:

4 Likes

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.

2 Likes

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 :smile:

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 :thinking:

Còn nếu bạn muốn truy cập vào biến đó thì phải dùng obj._Abc__abc :smile:

Vậy nên là tính bao đóng thì mình nghĩ là còn (cho đến khi bạn muốn) :smile:

1 Like

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

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 :grin:

2 Likes

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 :grin: 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 :smile: nên là không phải lo lắm.

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