Tôi đang cố gắng kết nối qua telnet với một thiết bị phòng thí nghiệm. Tôi muốn mở rộng các lớp Telnet
từ các module telnetlib
trong thư viện chuẩn, bao gồm các chức năng cụ thể để công cụ của chúng tôi:Python - kế thừa từ các lớp học kiểu cũ
import telnetlib
class Instrument(telnetlib.Telnet):
def __init__(self, host=None, port=0, timeout=5):
super(Instrument,self).__init__(host, port, timeout)
Tất cả tôi đang cố gắng để làm trong mã này được kế thừa phương pháp __init__
từ phụ huynh lớp học (telnetlib.Telnet
) và vượt qua các đối số chuẩn, vì vậy tôi có thể thêm mọi thứ vào __init__
sau đó. Công thức này đã làm việc cho tôi vào những dịp khác; lần này nó mang lại cho tôi một lỗi ở câu lệnh super()
khi tôi cố gắng để nhanh chóng:
TypeError: must be type, not classobj
tôi nhìn vào mã nguồn cho telnetlib, và Telnet dường như là một lớp kiểu cũ (nó không kế thừa từ object
) - Tôi tự hỏi nếu điều này có thể là nguồn gốc của vấn đề của tôi? Nếu vậy, làm thế nào nó có thể được khắc phục? Tôi đã nhìn thấy một số ví dụ mã nơi lớp dẫn xuất kế thừa cả hai từ lớp cha và object
, mặc dù tôi không hoàn toàn chắc chắn nếu đây là một phản ứng với cùng một vấn đề như tôi.
tiết lộ đầy đủ: Tôi cũng đã cố gắng sử dụng telnetlib.Telnet
ở vị trí của super()
, và from telnetlib import Telnet
với Telnet
ở vị trí của super()
. Vấn đề vẫn tồn tại trong những trường hợp này.
Cảm ơn!
Tôi đã thử điều đó - nó mang lại cho tôi lỗi: 'TypeError: phương thức unbound __init __() phải được gọi với cá thể Telnet làm đối số đầu tiên (có str instance)' –
Vui lòng hiển thị mã và lỗi chính xác mà bạn nhận được mã tôi vừa đăng. Bởi vì đó thực sự là cách nó được thực hiện nếu bạn muốn gọi hàm tạo cha của một lớp kiểu cũ. – ThiefMaster
Ah, tôi đã phát hiện sự khác biệt giữa mã của bạn và của tôi - bạn đã có 'self' làm đối số đầu tiên của' __init__'. Nó hoạt động ngay bây giờ - cảm ơn bạn đã trả lời rất nhanh! Bạn có thể giải thích cho tôi tại sao bạn cần đưa ra 'self' làm đối số đầu tiên cho nhà xây dựng? Tôi mới dùng Python. –