Mã của tôi hoạt động tốt khi tất cả trong một tệp. Bây giờ, tôi đang chia lớp thành các mô-đun khác nhau. Các mô-đun đã được đặt cùng tên với các lớp. Có lẽ đây là một vấn đề, bởi vì MainPage
không thành công khi được tải. Liệu nó có nghĩ rằng tôi đang cố gắng kế thừa từ một mô-đun? Có thể xảy ra va chạm không gian tên mô-đun/lớp không?Python: Tên lớp giống với tên tệp/mô-đun dẫn đến sự cố kế thừa?
MainPage.py
import BaseHandler
from models import Item
from Utils import render
class MainPage(BaseHandler):
def body(self, CSIN=None): #@UnusedVariable
self.header('Store')
items = Item.all().order('name').fetch(10)
render('Views/table.html', self, {'items': items})
self.footer()
BaseHandler.py
from google.appengine.ext import webapp
from google.appengine.api import users
from Utils import *
# Controller
class BaseHandler(webapp.RequestHandler):
# ... continues ...
Không Traceback:
Traceback (most recent call last):
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3180, in _HandleRequest
self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3123, in _Dispatch
base_env_dict=env_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 515, in Dispatch
base_env_dict=base_env_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2382, in Dispatch
self._module_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2292, in ExecuteCGI
reset_modules = exec_script(handler_path, cgi_path, hook)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2188, in ExecuteOrImportScript
exec module_code in script_module.__dict__
File "C:\Users\odp\workspace\Store\src\Main.py", line 5, in <module>
import MainPage
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1267, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1917, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1267, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1819, in FindAndLoadModule
description)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1267, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1770, in LoadModuleRestricted
description)
File "C:\Users\odp\workspace\Store\src\MainPage.py", line 10, in <module>
class MainPage(BaseHandler):
TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given)
CẬP NHẬT Tôi dường như đã giải quyết nó. Quá trình nhập này hoạt động tốt hơn nhiều:
from BaseHandler import BaseHandler
Có kiểu mô-đun và tên lớp không giống nhau không?
Không phải kiểu xấu và có tên mô-đun và tên lớp giống nhau miễn là lớp vỏ là khác biệt. Trong Python, quy ước có tên mô-đun là tất cả các chữ thường và tên lớp là CamelCase. Tôi khuyên bạn nên đọc Hướng dẫn kiểu Python (PEP 8) - http://www.python.org/dev/peps/pep-0008/. Nó vô cùng hữu ích! – jathanism