Trình soạn thảo văn bản của tôi được lựa chọn có thể mở rộng thông qua các plugin trăn. Nó đòi hỏi tôi phải mở rộng các lớp và ghi đè lên các phương thức của nó. Cấu trúc chung trông giống đoạn mã dưới đây. Lưu ý rằng chữ ký hàm được cố định.Phạm vi thay đổi bên ngoài các lớp học
ftp_client
được cho là được chia sẻ bởi các phiên bản của cả hai lớp.
ftp_client = None
class FtpFileCommand(sublime_plugin.TextCommand):
def run(self, args):
global ftp_client # does it reference the variable of the outer scope?
self.ftp_client = ftplib.FTP('foo')
# login and stuff
class FtpFileEventListener(sublime_plugin.EventListener):
def run(self, args):
global ftp_client # same for this
self.ftp_client.quit() #
Cả hai lớp này được cho là có một biến chung. Phương pháp hay nhất để chia sẻ các biến là gì?
Sửa dựa trên madjars trả lời:
FtpFileCommand.run
được gọi là đầu tiên, instanciates ftp_client
và hoạt động giống như một nét duyên dáng. FtpFileEventListener.run
được gọi sau và có thể tham chiếu ftp_client
hoàn hảo nhưng vẫn là None
. Sử dụng từ khóa chung, nó có thêm biến làm thành viên vào self
không?
Để trả lời câu hỏi thứ hai trong chỉnh sửa của bạn: làm cho 'ftp_client' một thuộc tính thể hiện đánh bại mục đích sử dụng hình cầu. đối tượng 'FTP' mới sẽ được gán cho biến' ftp_client' sau khi khai báo nó là global trước tiên. sau đó, nó có thể được tham chiếu từ bất cứ đâu mà không cần khai báo nó là toàn cầu, ví dụ: 'ftp_client.quit()'. – ekhumoro