2012-12-16 22 views
10

Tôi bị bối rối. Tôi đang cố gắng tạo một lớp con không quan tâm đến bất kỳ tham số từ khóa nào - chỉ cần chuyển tất cả các tham số đó vào lớp cha và đặt rõ ràng một tham số cần thiết cho hàm tạo. Dưới đây là một phiên bản đơn giản hóa của mã của tôi:Đối số từ khóa không mong muốn khi sử dụng ** kwargs trong hàm tạo

class BaseClass(object): 
    def __init__(self, required, optional=None): 
     pass 

def SubClass(BaseClass): 
    def __init__(self, **kwargs): 
     super(SubClass, self).__init__(None, **kwargs) 

a = SubClass(optional='foo') # this throws TypeError!?!?? 

này không thành công với

[email protected]$ python minimal.py 
Traceback (most recent call last): 
    File "minimal.py", line 9, in <module> 
    a = SubClass(optional='foo') 
TypeError: SubClass() got an unexpected keyword argument 'optional' 

Làm thế nào nó có thể phàn nàn về một cuộc tranh cãi từ khóa bất ngờ khi phương pháp này có **kwargs?

(Python 2.7.3 trên Ubuntu)

Trả lời

18
def SubClass(BaseClass): 

là một chức năng, không phải là một lớp. Không có lỗi vì BaseClass có thể là tên đối số và các hàm lồng nhau được cho phép. Cú pháp là vui, phải không?

class SubClass(BaseClass): 
+8

uhh đúng. cảm ơn./tôi chạy đi và trốn – Leopd

0

Vượt qua bài đăng này khi tìm kiếm câu trả lời cho cùng một lỗi chính xác, nhưng nguyên nhân khác.

Tôi đã giải quyết được vấn đề của mình (nhầm lẫn người mới bắt đầu), nhưng tôi nghĩ nên đặt nó ở đây trong trường hợp nó giúp người khác.

cấu trúc dự án của tôi:

project\ 
--package1\ 
----Module1.py 
----Module2.py 
--package2\ 
...blah blah blah... 

nơi module2 kéo dài Module1, và tên lớp là giống như tên mô-đun/file

Trong Module2.py, tôi đã có:

from package1 import Module1 

giả định rằng điều này sẽ nhập các lớp bên trong.

nhận một lỗi lập luận từ khóa bất ngờ khi tôi đã cố gắng để tạo ra module2 Lớp

Mod2 = Module2(kw1=var1, kw2=var2) 

Cố định bằng cách sử dụng

from package1.Module1 import Module1 

Đó là [package name].[module name] import [class name]

Hy vọng điều này sẽ giúp người khác ngoài kia

Các vấn đề liên quan