Tôi có một lớp Python với một phương pháp mà nên chấp nhận lập luận và tranh cãi từ khóa theo cách nàychức năng python * args và kwargs ** với các đối số từ khóa cụ thể khác
class plot:
def __init__(self, x, y):
self.x = x
self.y = y
def set_axis(self, *args, xlabel="x", ylabel="y", **kwargs):
for arg in args:
<do something>
for key in kwargs:
<do somethng else>
khi gọi:
plt = plot(x, y)
plt.set_axis("test1", "test2", xlabel="new_x", my_kwarg="test3")
Tôi gặp lỗi: TypeError: set_axis() got multiple values for keyword argument 'xlabel'
Dù sao thì nếu tôi đặt phương thức của mình như
class plot:
def __init__(self, x, y):
self.x = x
self.y = y
def set_axis(self, xlabel="x", ylabel="y", *args, **kwargs):
for arg in args:
<do something>
for key in kwargs:
<do somethng else>
và gọi:
plt = plot(x, y)
plt.set_axis(xlabel="new_x", "test1", "test2", my_kwarg="test3")
tôi nhận được SyntaxError: non-keyword arg after keyword arg
, như tôi đã mong đợi. Điều gì là sai với trường hợp đầu tiên? Làm thế nào tôi nên nói với phương pháp của tôi để chấp nhận bất kỳ đối số người dùng và đối số từ khóa, khác với các đối số mặc định? (Hy vọng câu hỏi của tôi là đủ rõ ràng)
Bạn đang sử dụng phiên bản Python nào? Lớp đầu tiên bạn liệt kê không phân tích cú pháp trong Python 2.7.3 vì '* args' được kế thừa bởi tên tham số trong định nghĩa' set_axis'. – phant0m