Tôi khá mới để Python và có một câu hỏi liên quan đến lớp sau:Thực hành tốt nhất khi xác định các biến dụ
class Configuration:
def __init__(self):
parser = SafeConfigParser()
try:
if parser.read(CONFIG_FILE) is None:
raise IOError('Cannot open configuration file')
except IOError, error:
sys.exit(error)
else:
self.__parser = parser
self.fileName = CONFIG_FILE
def get_section(self):
p = self.__parser
result = []
for s in p.sections():
result.append('{0}'.format(s))
return result
def get_info(self, config_section):
p = self.__parser
self.section = config_section
self.url = p.get(config_section, 'url')
self.imgexpr = p.get(config_section, 'imgexpr')
self.imgattr1 = p.get(config_section, 'imgattr1')
self.imgattr2 = p.get(config_section, 'imgattr2')
self.destination = p.get(config_section, 'destination')
self.createzip = p.get(config_section, 'createzip')
self.pagesnumber = p.get(config_section, 'pagesnumber')
Is it OK để thêm các biến dụ hơn về chức năng khác, get_info
trong ví dụ này, hoặc cách tốt nhất để xác định tất cả các biến mẫu trong hàm tạo? Nó không thể dẫn đến mã spaghetti nếu tôi định nghĩa các biến cá thể mới trên khắp nơi?
CHỈNH SỬA: Tôi đang sử dụng mã này với một hình ảnh scraper đơn giản. Qua get_section
Tôi trả về tất cả các phần trong tệp cấu hình và sau đó lặp qua chúng để truy cập từng trang web mà tôi đang chụp ảnh. Đối với mỗi lần lặp, tôi thực hiện cuộc gọi đến get_section
để nhận cài đặt cấu hình cho từng phần trong tệp cấu hình. Nếu bất cứ ai có thể đưa ra một cách tiếp cận khác, nó sẽ ổn thôi! Cảm ơn!
http://stackoverflow.com/questions/2964230/python-how-should-i-make-instance-variables-available –
Bản thân 'tự.__parser = None' nên được đặt ở đầu '__init __()'. Lý do là '__init __()' được gọi là một mentod đầu tiên của đối tượng * đã tồn tại *. Nếu trình phân tích cú pháp không đọc được tệp cấu hình và làm tăng ngoại lệ, ngoại lệ có thể do elswhere bị bắt (chương trình có thể không bị chấm dứt). Sau đó, đối tượng của lớp 'Configuration' vẫn còn tồn tại và sau đó' get_info() 'sẽ gây ra trường hợp * AttributeError: Configuration không có thuộc tính '__parser'. – pepr
@pepr Tôi có nên đọc bạn trả lời cách tôi nên thêm 'self .__ parser = None' vào đầu' __init __. Py' hay bạn đề xuất chuyển khởi chạy phân tích cú pháp từ '__init __. Py' sang một hàm khác? – happygoat