2012-07-21 35 views
6

Tôi đã bắt đầu học python trong vài ngày qua và trong khi khám phá lập trình hướng đối tượng, tôi đang gặp sự cố. Tôi đang sử dụng Eclipse trong khi chạy plugin pydev, đang chạy trên python 3.3 beta và đang sử dụng hệ thống cửa sổ 64 bit.Làm cách nào để mở rộng các lớp khác bằng Python một cách chính xác? (python v3.3)

Tôi có thể khởi tạo lớp và sử dụng bất kỳ phương pháp nào trong đó, miễn là tôi không cố gắng mở rộng lớp cha (mỗi lớp tôi đã mã hóa trong một tệp nguồn khác) Ví dụ: và chạy tốt.

class pythonSuper: 
    string1 = "hello" 
    def printS(): 
     print pythonSuper.string1 

và mã truy cập và chạy nó ...

from stackoverflow.questions import pythonSuper 
class pythonSub: 
    pysuper = pythonSuper.pythonSuper() 
    pysuper.printS() 

Như tôi đã nói, mà làm việc. Mã sau đây không

class pythonSuper: """Same superclass as above. unmodified, except for the spacing""" 
string1 = "hello" 
def printS(self): 
    print(pythonSuper.string1) 

Vâng, điều đó không hoàn toàn đúng. Siêu lớp là hoàn toàn tốt, ít nhất là kiến ​​thức của tôi. Đó là lớp con rằng weirds ra

from stackoverflow.questions import pythonSuper 
class pythonSub(pythonSuper): 
    pass 

pythonObject = pythonSub() 
pythonSub.pythonSuper.printS() 

khi lớp con đang chạy Eclipse in ra lỗi này

Traceback (most recent call last): 
    File "C:\Users\Anish\workspace\Python 3.3\stackoverflow\questions\pythonSub.py",   
    line 7, in <module> 
class pythonSub(pythonSuper): 
TypeError: module.__init__() takes at most 2 arguments (3 given) 

Tôi không có ý tưởng những gì đang xảy ra. Tôi đã học python từ hướng dẫn của thenewboston, nhưng đó là những lỗi thời (tôi nghĩ mã hướng dẫn của anh ấy sử dụng phiên bản python 2.7). Ông cũng mã hóa trong IDLE, có nghĩa là tất cả các lớp của ông đều có trong một tập tin. Tôi, tuy nhiên, tất cả đều được mã hóa trong các tệp của riêng họ. Điều đó có nghĩa là tôi không biết liệu các lỗi mã tôi nhận được là kết quả của cú pháp lỗi thời hay thiếu hiểu biết về ngôn ngữ này. Nhưng tôi lạc đề. Nếu bất kỳ ai cũng có thể đăng lại bằng giải pháp và/hoặc giải thích lý do mã bị lỗi và tôi có thể làm gì để khắc phục. Một lời giải thích sẽ được ưa thích hơn. Tôi muốn biết những gì tôi đang làm sai vì vậy tôi có thể tránh và khắc phục vấn đề trong các tình huống tương tự hơn là chỉ cần sao chép và dán một số mã và thấy rằng nó hoạt động. Xin cảm ơn và tôi mong được câu trả lời của bạn

Trả lời

0

pythonSuper là mô-đun, không phải lớp học.

class pythonSub(pythonSuper.pythonSuper): 
    pass 
+0

cảm ơn, nhưng bây giờ nó đăng lỗi này Traceback (cuộc gọi gần đây nhất cuối cùng): Tệp "C: \ Users \ Anish \ workspace \ Python 3.3 \ stackoverflow \ questions \ pythonSub.py ", line 11, in pythonSub.pythonSuper.printS() AttributeError: loại đối tượng 'pythonSub' không có thuộc tính 'pythonSuper' và tôi không muốn pester bất cứ ai, nhưng bất kỳ lý do gì? – pipsqueaker117

+3

Tại sao bạn mong đợi pythonSub đang mở rộng pythonSuper, không chứa nó. 'printS' được thừa kế, và bạn truy cập nó trực tiếp thông qua cá thể pythonSub của bạn –

+0

@DanielRoseman Tôi xin lỗi, nó đã bay hơi qua đầu tôi. ngôn ngữ, um, noob (Hoặc bạn có thể liên kết tôi đến một trang nơi tôi có thể tìm hiểu tất cả những thứ này) – pipsqueaker117

3

Tôi đã chạy mã của bạn, mặc dù có một vài sửa đổi và nó chạy hoàn hảo. Đây là mã của tôi:

pythonSuper:

class pythonSuper: 
    string1 = 'hello' 
    def printS(self): 
     print(self.string1) 

chính:

from pythonSuper import pythonSuper as pySuper 

class pythonSub(pySuper): 
    pass 

pythonObject = pythonSub() 
pythonObject.printS() 

LƯU Ý: Sự thay đổi tôi đã thực hiện cho mã của bạn như sau:

Trong code của bạn , bạn đã viết pythonSub.pythonSuper.printS() không chính xác, bởi vì qua số pythonSub bạn đã hỗ trợ printS() metho d, được kế thừa trực tiếp từ lớp cha. Vì vậy, không cần phải tham khảo siêu lớp một cách rõ ràng trong tuyên bố đó. Tuyên bố mà tôi đã sử dụng để thay thế câu nói trên, pythonObject.printS(), dường như đã giải quyết vấn đề này.

+0

Điều đó cho tôi lỗi Traceback (cuộc gọi gần đây nhất): File "C: \ Users \ Anish \ workspace \ Python 3.3 \ stackoverflow \ questions \ pythonSub.py ", dòng 8, trong pytho lớp nSub (pySuper): TypeError: module .__ init __() nhận tối đa 2 đối số (3 đã cho) Tôi đã thử sao chép và dán mã (với tên gói của riêng mình), nhưng kết quả là lỗi trên. Tôi bắt đầu nghĩ rằng đó là một cú pháp 3.3 python vì hai giải pháp đã thất bại (theo nghĩa chương trình không chạy đúng), nhưng tôi có thể hoàn toàn tắt nhãn hiệu – pipsqueaker117

+0

Vui lòng đăng mã và lỗi cho tôi tốt hơn có thể giúp bạn. Tôi tin rằng itmyst là một sai lầm bạn đã thực hiện trên phiên bản của bạn của mã, tôi đã viết ở trên trên python 3.3 và nó đã làm việc tuyệt vời! – NlightNFotis

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