cuốn sách gpt4 ai đã làm

Việc thừa kế giả cho các thuộc tính của lớp có tệ không

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 18:36:37 25 4
mua khóa gpt4 Nike

Đầu tiên, câu hỏi này dựa trên PySide, nhưng đây là câu hỏi chung về kế thừa thuộc tính lớp.

Vì vậy tôi có vấn đề về thừa kế. Về cơ bản tôi muốn kế thừa 2 lớp GUI PySide. Đa kế thừa tạo ra xung đột lớn và gây ra lỗi. Về cơ bản, tôi đã tạo một tiện ích tùy chỉnh và muốn tạo tiện ích tương tự như tiện ích được gắn đế (cửa sổ nổi).

Một cách tôi thấy dễ thực hiện là viết lại getattr phương pháp chuyển hướng các cuộc gọi thuộc tính như dưới đây.

lớp DockWidget(QtGui.QDockWidget):
def __init__(self):
siêu().__init__()
self.test = Kiểm tra()

# Vùng chứa là một tiện ích tùy chỉnh chứa tiện ích Kiểm tra và thanh công cụ.
self.setWidget(self.test.getCustomContainer())

def __getattr__(bản thân, tên):
"""Gọi phương thức của thuộc tính khi không tìm thấy tên thuộc tính đã cho.

Lưu ý: Cấp quyền truy cập đầy đủ vào thuộc tính thử nghiệm.

Lập luận:
name(str): Tên phương thức hoặc thuộc tính.
"""
nếu hasattr(self.test, name):
trả về self.test.__getattribute__(name)
# kết thúc __getattr
# lớp cuối DockWidget

Kiểm tra lớp (QtGui.QWidget):
def doSomething(self, msg):
in (tin nhắn)
# kết thúc làm gì đó
#endTest

widg = DockWidget()
widg.doSomething("Thử nghiệm")

Tôi tự hỏi liệu điều này có thực sự tệ không và liệu có cách nào tốt hơn không.

câu trả lời hay nhất

由于DockWidgetBài kiểm traTất cả đều được kế thừaQWidget, vì vậy bạn có thể sử dụng mixin. Điều này sẽ cho phép bạn thực hiện những việc như triển khai lại các phương thức ảo đang sử dụng __getattr__ Không thể đạt được.

lớp WidgetMixin(đối tượng):
def doSomething(self, msg):
in (tin nhắn)

def closeEvent(tự, sự kiện):
print(self.__class__.__name__)

Kiểm tra lớp (WidgetMixin, QtGui.QWidget):
def __init__(self):
siêu().__init__()

lớp DockWidget(WidgetMixin, QtGui.QDockWidget):
def __init__(self):
siêu().__init__()

Về python - việc thừa kế giả cho các thuộc tính của lớp có tệ không, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/21467634/

25 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress