Tôi có một Monostate cơ bản với Python 2.6.Cảnh báo Ngừng sử dụng Python với Monostate __new__ - Ai đó có thể giải thích lý do tại sao?
class Borg(object):
__shared_state = {}
def __new__(cls, *args, **kwargs):
self = object.__new__(cls, *args, **kwargs)
self.__dict__ = cls.__shared_state
return self
def __init__(self, *args, **kwargs):
noSend = kwargs.get("noSend", False)
reportLevel = kwargs.get("reportLevel", 30)
reportMethods = kwargs.get("reportMethods", "BaseReport")
contacts= kwargs.get("contacts", None)
a = Borg(contacts="Foo", noSend="Bar",)
nào hạnh phúc mang lại cho tôi những cảnh báo Deprecation sau ..
untitled:4: DeprecationWarning: object.__new__() takes no parameters
self = object.__new__(cls, *args, **kwargs)
Sau một chút googling Tôi tìm thấy điều này được gắn vào Bug #1683368. Điều tôi không thể hiểu được là điều này có ý nghĩa gì. Khiếu nại về dòng sau
self = object.__new__(cls, *args, **kwargs)
Điều này có vẻ ổn. Ai đó có thể giải thích trong các điều khoản laymens tại sao đây là sự cố. Tôi hiểu rằng "điều này không phù hợp với các danh sách tích hợp khác, như danh sách" nhưng tôi không chắc tôi hiểu tại sao. Có ai đó giải thích điều này cho tôi thấy đúng cách để làm điều đó?
Cảm ơn
Tôi đang thất bại trong việc xem cách họ bị bỏ qua? Đưa ra * args và ** kwargs từ mới và nó sẽ bom vì chúng là cần thiết bởi __init__ đang mong đợi chúng. Bạn tuyên bố cuối cùng là một trong những tôi đang cố gắng để ngăn chặn :-) Tôi muốn nó làm việc trong 3k. – rh0dium
Tôi không thể tranh cãi với các nhà thiết kế ngôn ngữ. Nếu họ nói "mới không có bất kỳ đối số", tôi làm cho nó không có đối số. '__init__' và' __new__' hoạt động tương tự, có lẽ trường hợp sử dụng của bạn nên sử dụng init thay vì mới. –