khi đọc tài liệu python và các danh sách gửi thư khác nhau, tôi luôn đọc những gì trông hơi giống một giáo điều. Các biến toàn cầu nên tránh như địa ngục, chúng là thiết kế kém ... OK, tại sao không? Nhưng có một số tình huống sống thực sự mà tôi không làm thế nào để tránh một mô hình như vậy.Làm thế nào để tránh các biến toàn cầu
Giả sử tôi có GUI có thể tải một số tệp từ menu chính. Các đối tượng tệp tương ứng với các tệp đã tải có thể được sử dụng để hiển thị tất cả GUI (ví dụ: trình xem hình ảnh sẽ hiển thị hình ảnh và các hành động khác nhau có thể được thực hiện trên các hộp thoại/plugin khác nhau).
Có một cái gì đó thực sự xảy ra với việc xây dựng các thiết kế sau:
- Menu.py -> file sẽ được nạp từ đây
- Main.py -> các đối tượng tập tin được tải có thể được sử dụng đây
- Dialog1.py -> hoặc đây
- Dialog2.py -> hoặc có
- Dialog3.py -> hoặc có
- ...
- Globals.py
nơi Globals.py sẽ lưu một từ điển có khóa là tên của các tệp đã tải và giá trị của các đối tượng tệp tương ứng. Sau đó, từ đó, các phần khác nhau của mã cần các dữ liệu đó sẽ truy cập nó thông qua các tham chiếu yếu.
Xin lỗi nếu câu hỏi của tôi có vẻ (hoặc là) ngu ngốc, nhưng bạn có thấy bất kỳ lựa chọn thay thế trang nhã hoặc toàn cầu nào không? Một cách sẽ là đóng gói từ điển dữ liệu đã nạp trong lớp ứng dụng chính của Main.py bằng cách xem nó như là phần truy cập trung tâm của GUI. Tuy nhiên, điều đó cũng sẽ mang lại một số biến chứng vì lớp này nên dễ dàng truy cập từ tất cả các hộp thoại cần dữ liệu ngay cả khi chúng là những đứa trẻ trực tiếp cần thiết của nó.
cảm ơn rất nhiều sự giúp đỡ của bạn
biến toàn cầu không phải là điều xấu. Cái ác là gì khi sử dụng nó như một biến có thể thay đổi được. Các biến toàn cầu sẽ vẫn tĩnh và "bất biến" bất cứ khi nào có thể. Nếu bạn phải thay đổi nội dung từ điển trong globals.py, không tốt. Khác hơn thế, để đọc là không sao. – CppLearner
có, toàn cầu "hằng số" là ok, toàn cầu "biến" nên tránh. – monkut
OK, tôi hiểu ý nghĩa của cả hai bạn nhưng tôi vẫn không thấy một thay thế python hợp lệ cho thiết kế mà tôi đã đề xuất trong đó từ điển dữ liệu được tải có thể phát triển qua thời gian (tệp được tải mới, tệp đã xóa) – Eurydice