Làm thế nào để bạn truy cập các biến từ một lớp từ một lớp khác trong python?

Tôi có một lớp chính [QMainWindow] với 2 chức năng [Tôi chạy các chức năng ở đây vì tôi cần sử dụng/gọi QLabels, QLineEdit. văn bản [], v.v. ] Hàm có tên “initialDF” tải xuống một khung dữ liệu từ web và “chơi” với nó, cuối cùng hàm nhận được một biến có tên "Kiểm tra " và một khung dữ liệu cuối cùng có tên là “Dữ liệu”. Chức năng được gọi là “bucleDF” biến “Dữ liệu”

Tôi cần sử dụng "Kiểm tra " làm trình xác thực While trong một lớp khác [QObject] chạy QThread của tôi và tôi cần gọi “Dữ liệu” trong vòng lặp While để “cập nhật” trình xác thực gọi “Kiểm tra”

Chúng tôi có một lớp gọi là

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
2, kế thừa từ một lớp khác,
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
3 [nằm trong mô-đun
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
4 trong thư viện chuẩn của Python]

from collections import Counter


class FancyCounter[Counter]:
    def commonest[self]:
        [value1, count1], [value2, count2] = self.most_common[2]
        if count1 == count2:
            raise ValueError["No unique most common value"]
        return value1

Cách chúng tôi biết chúng tôi đang kế thừa từ lớp

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
3 bởi vì khi chúng tôi định nghĩa
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
2, ngay sau tên lớp, chúng tôi đặt dấu ngoặc đơn và viết
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
3 bên trong chúng

Để tạo một lớp kế thừa từ một lớp khác, sau tên lớp bạn sẽ đặt dấu ngoặc đơn và sau đó liệt kê bất kỳ lớp nào mà lớp của bạn kế thừa từ đó

Trong định nghĩa hàm, dấu ngoặc đơn sau tên hàm biểu thị các đối số mà hàm chấp nhận. Trong một định nghĩa lớp, dấu ngoặc đơn sau tên lớp thay vì đại diện cho các lớp được kế thừa từ

Thông thường khi thực hành kế thừa lớp trong Python, chúng ta chỉ kế thừa từ một lớp. Bạn có thể kế thừa từ nhiều lớp [gọi là đa kế thừa], nhưng hơi hiếm. Chúng ta sẽ chỉ thảo luận về kế thừa một lớp ngay bây giờ

Các phương thức được kế thừa từ các lớp cha

Để sử dụng lớp

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
2 của chúng ta, chúng ta có thể gọi nó [giống như bất kỳ lớp nào khác]

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]

Lớp của chúng tôi sẽ chấp nhận một chuỗi khi chúng tôi gọi nó vì lớp

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
3 đã triển khai phương thức
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
00 [phương thức khởi tạo]

Lớp của chúng tôi cũng có phương thức

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
01 để biểu diễn chuỗi đẹp

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
0

Nó thậm chí còn có một loạt các chức năng khác. Ví dụ: nó đã ghi đè điều xảy ra khi bạn sử dụng dấu ngoặc vuông để gán các cặp khóa-giá trị trên các thể hiện của lớp

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
3

Chúng ta có thể gán các cặp khóa-giá trị vì lớp cha của chúng ta,

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
3 tạo các đối tượng giống như từ điển [a. k. a. ]

Tất cả các chức năng đó được kế thừa từ lớp

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
3

Thêm chức năng mới trong khi kế thừa

Vì vậy, lớp

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
2 của chúng ta đã kế thừa tất cả các chức năng mà lớp
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
3 của chúng ta có nhưng chúng ta cũng đã mở rộng nó bằng cách thêm một phương thức bổ sung,
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
06, phương thức này sẽ cung cấp cho chúng ta mục phổ biến nhất trong lớp của chúng ta

Khi chúng ta gọi phương thức

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
06, chúng ta sẽ nhận được chữ cái
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
08 [xảy ra ba lần trong chuỗi ban đầu chúng ta đã cung cấp cho đối tượng
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
2 của mình]

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
2

Phương thức

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
06 của chúng ta dựa trên phương thức
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
31, mà chúng ta không định nghĩa nhưng lớp cha của chúng ta,
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
3, đã định nghĩa

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
6

Lớp

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
2 của chúng ta có một phương thức
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
34 bởi vì lớp cha của chúng ta,
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
3 đã định nghĩa nó cho chúng ta

Ghi đè các phương thức kế thừa

Nếu chúng ta muốn tùy chỉnh điều gì sẽ xảy ra khi gán cho một cặp khóa-giá trị trong lớp này, chúng ta có thể làm điều đó bằng cách ghi đè phương thức

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
36. Ví dụ: hãy tạo nó sao cho nếu chúng ta gán một khóa cho một giá trị âm, thay vào đó, nó sẽ gán nó cho
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
37

Trước đây khi chúng tôi chỉ định

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
38 cho
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
39, chúng tôi muốn nó được đặt thành
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
37 thay vì
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
39 [ở đây là
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
39 vì chúng tôi chưa tùy chỉnh cái này]

from collections import Counter


class FancyCounter[Counter]:
    def commonest[self]:
        [value1, count1], [value2, count2] = self.most_common[2]
        if count1 == count2:
            raise ValueError["No unique most common value"]
        return value1
7

Để tùy chỉnh hành vi này, chúng tôi sẽ tạo một phương thức

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
36 chấp nhận
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
24,
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
25 và
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
26 bởi vì đó là những gì
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
36 được cung cấp bởi Python khi nó được gọi

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
3

Phương pháp

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
36 ở trên về cơ bản nói. nếu
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
26 là số âm, hãy đặt nó thành
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
37

Nếu chúng tôi ngừng viết

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
36 vào thời điểm này, nó sẽ không hữu ích lắm. Trên thực tế, phương pháp
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
36 sẽ không làm được gì cả. nó sẽ không báo lỗi, nhưng nó cũng không thực sự làm gì cả

Để làm điều gì đó hữu ích, chúng ta cần gọi phương thức

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
36 của lớp cha. Chúng ta có thể gọi phương thức
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
36 của lớp cha bằng cách sử dụng
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
65

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
2

Chúng ta đang gọi

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
66, phương thức này sẽ gọi phương thức
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
36 trên lớp cha của chúng ta [
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
3] với
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
25 và lớp không âm mới của chúng ta là
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
26

Đây là triển khai đầy đủ của phiên bản mới này của lớp

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
2 của chúng tôi

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
9

Để sử dụng lớp này, chúng ta sẽ gọi nó và truyền lại một chuỗi

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]

Nhưng lần này, nếu chúng ta gán một khóa cho một giá trị âm, chúng ta sẽ thấy rằng nó sẽ được gán cho

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
37 thay thế

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
1

Bài tập lớp cho người mới bắt đầu nâng cao

Bạn muốn thực hành thêm với các lớp trong Python?

Lộ trình tập Diving Into Classes bao gồm 6 bài tập dành cho người mới bắt đầu nâng cao. Python Morsels cũng bao gồm hàng chục bài tập khác về các lớp và Python hướng đối tượng.

Chủ Đề