Ăn kiêng Maurer
2020-08-25 17. 21. 54 UTC
liên kết cố định
Bài đăng của Samuel Marks
Sau cuộc thảo luận về #python trên Freenode, tôi ở đây.
Falc - Chữ ký của phương thức 'Pharm. foo[]' không khớp với chữ ký của phương thức cơ sở trong lớp 'Base'
pretty much empty?
• All implementers to be forced to implement Base's method
• Base to be able to do very basic things with kwargs, namely log it
[to a file like stdout or a db]
• Support for [at least] Python 3.6–3.9 [I don't think `Protocol` has
been backported?]
• Implementors to have access to the proper name, rather than having
to unpack kwargs
Should I be using a Base class? - Metaclass? - Something else
entirely? - I know giving `b` a default value would resolve the
[PyCharm] linter error… but I want it to be a required argument.
from abc import ABC, abstractmethod
@abstractmethod
...
...
Python phân biệt giữa đối số vị trí và từ khóa
. Một đối số vị trí được xác định bởi
vị trí của nó trong danh sách tham số; .
identified by its name.
`**` giới thiệu đối số từ khóa tùy ý. Trong một cuộc gọi, tất cả
các đối số đó phải được chuyển dưới dạng "tên=giá trị".
Trong trường hợp của bạn ở trên, `b` không phải là đối số từ khóa và do đó
không khớp với `**kwargs`. Lỗi bạn quan sát là chính đáng.
Bạn có thể thử.
cơ sở lớp[ABC].
@abstractmethod
def foo[self, a, *args, **kwargs].
.
lớp Dược phẩm [Cơ sở].
def foo[self, a, b, *args, **kwargs].
.
Lưu ý rằng chữ ký của phương thức cơ sở cho phép các đối số vị trí tùy ý
và từ khóa. Do đó, các phương thức dẫn xuất phải
giống nhau.
Nếu đây không phải là điều bạn muốn, bạn có thể muốn khám phá
việc sử dụng trình trang trí hoặc lớp meta thay vì lớp cơ sở.
Samuel Marks
2020-08-27 05. 58. 11 giờ UTC
liên kết cố định
Điều chính tôi muốn là loại an toàn. Tôi muốn Python khiếu nại nếucallee sử dụng sai loại đối số và cung cấp đề xuất
những gì cần thiết và thông tin về nó.
Không có lớp cơ sở, tôi chỉ có thể có chuỗi tài liệu và nhập chú thích
để đạt được điều đó.
Tôi có thể sử dụng cái gì để yêu cầu tất cả những người triển khai phải có tối thiểu
các thuộc tính và đối số giống nhau, đồng thời cho phép họ thêm mới
properties and arguments?
Preferably I would like this all to happen before compile/interpret
time. This also opens it up to AST driven stub generation; as can be
found in various IDEs [and also a little project I wrote that `import
ast`].
Tôi có những lựa chọn nào ở đây? . // khoa học sydney. tổ chức>. tư vấn
decorator approaches will help here…
Samuel Marks
Charity | consultancy
| open-source |
Bài đăng của Samuel Marks
Sau cuộc thảo luận về #python trên Freenode, tôi ở đây.
Falc - Chữ ký của phương thức 'Pharm. foo[]' không khớp với chữ ký của phương thức cơ sở trong lớp 'Base'
pretty much empty?
• All implementers to be forced to implement Base's method
• Base to be able to do very basic things with kwargs, namely log it
[to a file like stdout or a db]
• Support for [at least] Python 3.6–3.9 [I don't think `Protocol` has
been backported?]
• Implementors to have access to the proper name, rather than having
to unpack kwargs
Should I be using a Base class? - Metaclass? - Something else
entirely? - I know giving `b` a default value would resolve the
[PyCharm] linter error… but I want it to be a required argument.
from abc import ABC, abstractmethod
@abstractmethod
...
...
Python make a distinction between positional and keyword
arguments. A positional argument is identified by its
position in the parameter list; a keyword argument is
identified by its name.
`**` introduces arbitrary keyword arguments. In a call, all
those arguments must be passed as "name=value".
In your case above, `b` is not a keyword argument and thus
is not matched by `**kwargs`. The error you observe is justified.
You can try:
class Base[ABC]:
@abstractmethod
def foo[self, a, *args, **kwargs]:
...
class Pharm[Base]:
def foo[self, a, b, *args, **kwargs]:
...
Note that the base method signature allows arbitrary positional
and keyword arguments. As a consequence, derived methods must do
the same.
If this is not what you want, you might want to explore
the use of a decorator or a meta class rather than a base class.
Ăn kiêng Maurer
2020-08-27 17. 51. 13 giờ UTC
liên kết cố định
Bài đăng của Samuel Marks
Điều chính tôi muốn là loại an toàn. Tôi muốn Python khiếu nại nếu
callee sử dụng sai loại đối số và cung cấp đề xuất
những gì cần thiết và thông tin về nó.
Không có lớp cơ sở, tôi chỉ có thể có chuỗi tài liệu và nhập chú thích
để đạt được điều đó.
Tôi có thể sử dụng cái gì để yêu cầu tất cả những người triển khai phải có tối thiểu
các thuộc tính và đối số giống nhau, đồng thời cho phép họ thêm mới
properties and arguments?
khả năng sử dụng một thể hiện của lớp dẫn xuất chỉ với kiến thức
về lớp cơ sở. Điều này ngụ ý rằng trong nhiều trường hợp, bạn
không cần biết lớp cụ thể vì bất kỳ thể hiện nào của
lớp dẫn xuất đều phải có hành vi thiết yếu của các thể hiện của lớp cơ sở.
Mô hình này áp đặt các hạn chế đối với những thay đổi chữ ký được phép.
Một phương thức ghi đè có thể thêm các tham số khác nhưng tất cả các tham số đó
phải có giá trị mặc định - nếu không, việc sử dụng với kiến thức của lớp cơ sở
.
Bài đăng của Samuel Marks
Tốt nhất là tôi muốn tất cả điều này xảy ra trước khi biên dịch/thông dịch
Use a "lint" version to check compatibilty.
Samuel Marks
2020-08-29 09. 14. 54 UTC
liên kết cố định
Vì vậy, không có cách nào để gặp lỗi AOT khi hai hàm khôngđược triển khai, nếu hai hàm có các đối số bắt buộc khác nhau trên
0
…và việc triển khai là.
lớp TensorFlow[Base].
def training[self, learning_rate, epochs, callbacks, dimensions, loss, Optimizer].
siêu[Cơ sở, bản thân]. __init__[epochs=epochs]
[+ chuỗi tài liệu và loại PEP484; .
So how do I enable this use-case? - Obviously it doesn't make sense to
include these on the base class, and giving them default values
probably doesn't make sense either.
Bạn đang nói rằng tôi không nên sử dụng ABC cho việc này. Vậy tôi nên sử dụng cái gì?
Yêu cầu mà tôi đang cố gắng thực thi là mỗi người triển khai đều có
`train` có thể gọi được đính kèm.
Tốt hơn là có một trường bắt buộc [nhưng đây chỉ là một trường tốt để có].
BTW. Tôi đã kích hoạt trường hợp sử dụng kế thừa đối số thông qua việc tạo
một thư viện với mô-đun `ast` dựng sẵn. Vì vậy, bây giờ bạn có thể có `def
train_c[self, config]` với cấu hình đề cập đến một thể hiện của lớp
kế thừa từ lớp cấu hình cơ sở. Xem tại đây để biết
cách triển khai https. //github. com/SamuelMarks/doctrans
Tuy nhiên, nếu tôi chỉ có các hàm chấp nhận một thể hiện của một lớp
làm đối số, thì điều đó sẽ khiến nó kém thân thiện hơn với người dùng . Vì vậy, tôi thực sự đang tìm cách xử lý cả hai giao diện theo cách
caller. So I really am looking for handling both interfaces in a
đơn giản.
Cảm ơn đề xuất của bạn,
Samuel Marks
Tổ chức từ thiện
| open-source |
Bài đăng của Dieter Maurer
Bài đăng của Samuel Marks
Điều chính tôi muốn là loại an toàn. Tôi muốn Python khiếu nại nếu
callee sử dụng sai loại đối số và cung cấp đề xuất
những gì cần thiết và thông tin về nó.
Không có lớp cơ sở, tôi chỉ có thể có chuỗi tài liệu và nhập chú thích
để đạt được điều đó.
Tôi có thể sử dụng cái gì để yêu cầu tất cả những người triển khai phải có tối thiểu
các thuộc tính và đối số giống nhau, đồng thời cho phép họ thêm mới
properties and arguments?
khả năng sử dụng một thể hiện của lớp dẫn xuất chỉ với kiến thức
về lớp cơ sở. Điều này ngụ ý rằng trong nhiều trường hợp, bạn
không cần biết lớp cụ thể vì bất kỳ thể hiện nào của
lớp dẫn xuất đều phải có hành vi thiết yếu của các thể hiện của lớp cơ sở.
Mô hình này áp đặt các hạn chế đối với những thay đổi chữ ký được phép.
Một phương thức ghi đè có thể thêm các tham số khác nhưng tất cả các tham số đó
phải có giá trị mặc định - nếu không, việc sử dụng với kiến thức của lớp cơ sở
.
Bài đăng của Samuel Marks
Tốt nhất là tôi muốn tất cả điều này xảy ra trước khi biên dịch/thông dịch
Use a "lint" version to check compatibilty.
Ăn kiêng Maurer
2020-08-29 10. 24. 30 UTC
liên kết cố định
Bài đăng của Samuel Marks
Vì vậy, không có cách nào để gặp lỗi AOT khi hai chức năng không
được triển khai, nếu hai chức năng . __init__[epochs=epochs]
implementors?
@abstractclass
asset epochs is not None and epochs > 0
super[Base, self].__init__[epochs=epochs]
[+ chuỗi tài liệu và loại PEP484; .
So how do I enable this use-case? - Obviously it doesn't make sense to
include these on the base class, and giving them default values
probably doesn't make sense either.
Bạn đang nói rằng tôi không nên sử dụng ABC cho việc này. Vậy tôi nên sử dụng cái gì?
và đặc biệt là lớp trong đó `train` có chữ ký này?
Bạn .
call `train` with a single positional argument.
Nhưng `train` trong lớp dẫn xuất không thể được gọi theo cách này.
Các lớp cơ sở có sẵn để nắm bắt các đặc điểm chung của một số
các lớp có liên quan. Trong ví dụ của bạn ở trên, đây không phải là trường hợp.
Không sử dụng các lớp cơ sở theo cách này.
Bài đăng của Samuel Marks
Yêu cầu mà tôi đang cố gắng thực thi là mỗi người triển khai đều có
`train` có thể gọi được đính kèm.
Tốt hơn là có một trường bắt buộc [nhưng đây chỉ là một trường tốt để có].
liên quan đến dẫn xuất lớp. Cả hai phương pháp đều cho phép bạn
kiểm tra bất cứ điều gì bạn muốn.
Bài đăng của Samuel Marks
.
Tuy nhiên, nếu tôi chỉ có các hàm chấp nhận một thể hiện của một lớp
làm đối số, thì điều đó sẽ khiến API trở nên ít thân thiện hơn với người dùng
caller. So I really am looking for handling both interfaces in a
đơn giản.
Try to stay with the essential paradigms underlaying the system --
in order to use the easy things whenever possible.
In your case, this means that the signature of an overriding
method must be quite similar to that of the overridden method.
Samuel Marks
2020-08-29 10. 46. 19 UTC
liên kết cố định
Đặt nguyên tắc thay thế Liskov sang một bên, tôi có một đề xuấtlàm theo PEP 3102 và thực hiện `def train[self, *, epochs]. `…
Đó là một gợi ý khá đơn giản mà tôi có thể tham gia.
Đáp lại Dieter.
Mục đích của tôi khi sử dụng lớp cơ sở là để giao diện
cấp cao nhất—chẳng hạn như API CLI, GUI, REST và RPC—đều có thể được định cấu hình trong< .
one place, but enable the greatest possible divergence from a
parameter standpoint.
Một giải pháp thay thế ở đây [trong miền này] là tạo một
Keras/scikit mới. học hỏi. Tôi. e. , một giao diện nhất quán sẽ được
triển khai đầy đủ theo từng khung.
Có nhiều lý do khiến tôi không muốn sử dụng giải pháp thay thế này, vì tôi
không cần phải vào đây [rất vui được bắt đầu một chủ đề mới nếu .
interested].
Hai ưu điểm chính của phương pháp này là.
0. Những người triển khai có thể [khá nhiều] khác nhau như họ muốn, với
các tham số bắt buộc và mặc định khác nhau; . Người triển khai không cần tạo API CLI, GUI, REST và RPC của riêng họ
I do have `assert`s to force `method0` to be executed before
`method1`];
1. Implementers don't need to create their own CLIs, GUIs, REST and RPC APIs
Hai nhược điểm chính.
0. Các thông số không được biết trước, vì vậy bạn có thể thực hiện toàn bộ thủ thuật
`Animal` [loại vịt] trong đó `Animal` thực sự có thể là `Chó` hoặc
`Horse` [making the obvious Base `ABC` & `abstractmethod` approach
'wrong']
1. Each implementer framework can maintain wildly different internal
API nội bộ cực kỳ khác nhau, tạo ra nhiều tích hợp phức tạp hơn—theo nghĩa đa ML—khó khăn hơn nhiều
difficult
Samuel Marks
Charity | consultancy
| open-source |
Bài đăng của Dieter Maurer
Bài đăng của Samuel Marks
Vì vậy, không có cách nào để có được AOT . __init__[epochs=epochs]
implemented, if the two functions have different required arguments on
implementors?
@abstractclass
asset epochs is not None and epochs > 0
super[Base, self].__init__[epochs=epochs]
[+ chuỗi tài liệu và loại PEP484; .
So how do I enable this use-case? - Obviously it doesn't make sense to
include these on the base class, and giving them default values
probably doesn't make sense either.
Bạn đang nói rằng tôi không nên sử dụng ABC cho việc này. Vậy tôi nên sử dụng cái gì?
và đặc biệt là lớp trong đó `train` có chữ ký này?
Bạn .
call `train` with a single positional argument.
Nhưng `train` trong lớp dẫn xuất không thể được gọi theo cách này.
Các lớp cơ sở có sẵn để nắm bắt các đặc điểm chung của một số
các lớp có liên quan. Trong ví dụ của bạn ở trên, đây không phải là trường hợp.
Không sử dụng các lớp cơ sở theo cách này.
Bài đăng của Samuel Marks
Yêu cầu mà tôi đang cố gắng thực thi là mỗi người triển khai đều có
`train` có thể gọi được đính kèm.
Tốt hơn là có một trường bắt buộc [nhưng đây chỉ là một trường tốt để có].
liên quan đến dẫn xuất lớp. Cả hai phương pháp đều cho phép bạn
kiểm tra bất cứ điều gì bạn muốn.
Bài đăng của Samuel Marks
.
Tuy nhiên, nếu tôi chỉ có các hàm chấp nhận một thể hiện của một lớp
làm đối số, thì điều đó sẽ khiến API trở nên ít thân thiện hơn với người dùng
caller. So I really am looking for handling both interfaces in a
đơn giản.
Try to stay with the essential paradigms underlaying the system --
in order to use the easy things whenever possible.
In your case, this means that the signature of an overriding
method must be quite similar to that of the overridden method.
Dennis Lee Bieber
2020-08-27 14. 41. 57 UTC
liên kết cố định
Bài đăng của Samuel Marks
Tôi có thể sử dụng điều gì sẽ yêu cầu tất cả những người triển khai phải có tối thiểu
các thuộc tính và đối số giống nhau, nhưng cũng cho phép
properties and arguments?
mới" của họ trước khi gọi super[] trên phần còn lại. Đó là
-- họ sẽ cần đóng gói lại các đối số vị trí và từ khóa để
chỉ những đối số mà lớp cơ sở của bạn được thiết kế để chấp nhận mới được cung cấp cho nó.
Bài đăng của Samuel Marks
Tốt nhất là tôi muốn tất cả điều này xảy ra trước khi biên dịch/thông dịch
thời gian. Điều này cũng mở ra khả năng tạo sơ khai do AST điều khiển; .
found in various IDEs [and also a little project I wrote that `import
ast`].
"biên dịch".
Bài đăng của Samuel Marks
Tôi có những lựa chọn nào ở đây?
decorator approaches will help here…
Bài đăng của Samuel Marks
Samuel Marks
Tổ chức từ thiện
| open-source |
LinkedIn
Bài đăng của Samuel Marks
Sau cuộc thảo luận về #python trên Freenode, tôi ở đây.
Falc - Chữ ký của phương thức 'Pharm. foo[]' không khớp với chữ ký của phương thức cơ sở trong lớp 'Base'
pretty much empty?
• All implementers to be forced to implement Base's method
• Base to be able to do very basic things with kwargs, namely log it
[to a file like stdout or a db]
• Support for [at least] Python 3.6–3.9 [I don't think `Protocol` has
been backported?]
• Implementors to have access to the proper name, rather than having
to unpack kwargs
Should I be using a Base class? - Metaclass? - Something else
entirely? - I know giving `b` a default value would resolve the
[PyCharm] linter error… but I want it to be a required argument.
from abc import ABC, abstractmethod
@abstractmethod
...
...
Python make a distinction between positional and keyword
arguments. A positional argument is identified by its
position in the parameter list; a keyword argument is
identified by its name.
`**` introduces arbitrary keyword arguments. In a call, all
those arguments must be passed as "name=value".
In your case above, `b` is not a keyword argument and thus
is not matched by `**kwargs`. The error you observe is justified.
@abstractmethod
...
...
Note that the base method signature allows arbitrary positional
and keyword arguments. As a consequence, derived methods must do
the same.
If this is not what you want, you might want to explore
the use of a decorator or a meta class rather than a base class.
--
Wulfraed Dennis Lee Bieber AF6VN
***@ix. netcom. com http. //wlfraed. đa dạng vi mô. giải phóng. tổ chức/