Tôi có một lớp:Tránh xác định tất cả các đối số trong một lớp con
class A(object):
def __init__(self,a,b,c,d,e,f,g,...........,x,y,z)
#do some init stuff
Và tôi có một lớp con mà cần thêm một arg (người cuối cùng W
)
class B(A):
def __init__(self.a,b,c,d,e,f,g,...........,x,y,z,W)
A.__init__(self,a,b,c,d,e,f,g,...........,x,y,z)
self.__W=W
Dường như câm để viết tất cả mã lò hơi này, ví dụ: chuyển tất cả các số arg từ số's Ctor đến cuộc gọi bên trong tới số' s ctor, từ đó mọi thay đổi đến cpu của A
phải được áp dụng cho hai vị trí khác trong mã của B
.
Tôi đoán python có một số thành ngữ để xử lý các trường hợp như vậy mà tôi không biết. Bạn có thể chỉ cho mình hướng chính xác được không?
linh cảm tốt nhất của tôi, là phải có một loại Copy-ctor cho A và sau đó thay đổi mã B vào
class B(A):
def __init__(self,instanceOfA,W):
A.__copy_ctor__(self,instanceOfA)
self.__W=W
này sẽ phù hợp với nhu cầu của tôi kể từ khi tôi luôn luôn tạo ra các lớp con khi đưa ra một thể hiện của người cha lớp học, Mặc dù tôi không chắc chắn liệu nó có thể ...
Nếu bạn có nhiều lý lẽ, tôi sẽ không sử dụng đối số vị trí nhưng có tất cả/nhất trong số họ như kwargs và sử dụng cú pháp py3 '*' 'def __initi __ (arg1, arg2, * kwarg1 = ..., ..., kwargx = ..., w = ...)' để buộc kwargs (= không dựa vào gọi món). Việc sử dụng 'def __init __ (self, arg1, arg2, *, ** kwargs)' ngắn hơn, nhưng tôi không thích nó bởi vì nó làm rối tung mã hoàn thành trong các IDE như pycharm. Ngoài một chút chất thải màn hình, tác hại của việc viết ra tất cả các kwarg là gì? Bạn sẽ phải ghi lại tất cả chúng trong docstring ... –