Có nền trong Java, rất dài và nghiêm ngặt, tôi thấy khả năng biến đổi các đối tượng Python để cung cấp cho chúng các trường khác với các trường được trình bày cho hàm tạo thực sự "xấu xí".Xây dựng đối tượng Python 3: đó là cách thức hay nhất của Pythonic?
Cố gắng làm quen với cách tư duy Pythonic, Tôi tự hỏi làm cách nào để cho phép đối tượng của mình được xây dựng.
bản năng của tôi là phải vượt qua các trường ở thời gian thi công, chẳng hạn như:
def __init__(self, foo, bar, baz=None):
self.foo = foo
self.bar = bar
self.baz = baz
Nhưng điều đó có thể trở nên quá dài dòng và khó hiểu với nhiều lĩnh vực để vượt qua. Để khắc phục điều này tôi giả sử dụng phương pháp tốt nhất là vượt qua một từ điển để các nhà xây dựng, từ đó các lĩnh vực được chiết xuất:
def __init__(self, field_map):
self.foo = field_map["foo"]
self.bar = field_map["bar"]
self.baz = field_map["baz"] if baz in field_map else None
Cơ chế khác mà tôi có thể nghĩ đến là để đã các lĩnh vực bổ sung ở những nơi khác, chẳng hạn như:
class Blah(object):
def __init__(self):
pass
...
blah = Blah()
blah.foo = var1
Nhưng như vậy cảm thấy cách quá lỏng đối với tôi.
(Tôi cho rằng vấn đề trong đầu của tôi là làm thế nào tôi đối phó với giao diện bằng Python ...)
Vì vậy, để nhắc lại câu hỏi: Làm thế nào tôi nên xây dựng đối tượng của tôi bằng Python? Có một quy ước được chấp nhận không?
Thời gian xây dựng sẽ là khi '__new__' được gọi. Vào thời điểm '__init__' được gọi, cá thể đã tồn tại và đó là * thời gian khởi tạo *. – u0b34a0f6ae
@ kaizer.se Chúc mừng về thuật ngữ. –