Làm cách nào để truy cập các biến của 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”

Sử dụng class_name dot variable_name để truy cập một biến lớp từ một phương thức lớp trong Python. Sử dụng thể hiện để truy cập các biến bên ngoài lớp

Ví dụ truy cập một biến lớp trong Python

Mã ví dụ đơn giản

Biến lớp là một biến được chia sẻ bởi tất cả các đối tượng của cùng một lớp

class Employee:
    branch = 'IT Branch'  # Class Variable

    def a_class_method[]:
        print[Employee.branch]


Employee.a_class_method[]

đầu ra

Cách truy cập các biến từ một lớp trong python

In giá trị biến

class Example[object]:
    msg = "Hello"


obj = Example[]

print[obj.msg]
print[Example.msg]

đầu ra

Xin chào
Xin chào

Truy cập các biến lớp bên ngoài lớp trong Python

Đầu tiên, bạn cần tạo một thể hiện của lớp, sau đó bạn có thể sử dụng thể hiện đó để truy cập vào biến thể hiện và hàm của nó

class Example[object]:
    var_msg = "Welcome"
    var_num = 100


obj_example = Example[]

print[obj_example.var_msg]
print[obj_example.var_num]

đầu ra

Chào mừng
100

Hãy bình luận nếu bạn có bất kỳ nghi ngờ hoặc đề xuất nào về hướng dẫn biến Python này

Ghi chú. IDE. PyCharm 2021. 3. 3 [Phiên bản cộng đồng]

cửa sổ 10

Trăn 3. 10. 1

Tất cả các Ví dụ về Python đều nằm trong Python 3, vì vậy có thể nó khác với python 2 hoặc các phiên bản nâng cấp

Rohit

Bằng cấp về Khoa học Máy tính và Kỹ sư. Nhà phát triển ứng dụng và có kinh nghiệm về nhiều ngôn ngữ lập trình. Đam mê công nghệ & thích học hỏi kỹ thuật

Chúng tôi có một lớp tên 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ó bởi vì lớp

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
3 đã triển khai một phương thức
>>> letters
FancyCounter[{'e': 3, 'l': 2, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1}]
0 [một phương thức khởi tạo]

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

>>> letters
FancyCounter[{'e': 3, 'l': 2, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1}]
1 để biểu diễn chuỗi đẹp

>>> letters
FancyCounter[{'e': 3, 'l': 2, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1}]

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

>>> letters['l'] = -2
>>> letters
FancyCounter[{'e': 3, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1, 'l': -2}]

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ả 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,
>>> letters
FancyCounter[{'e': 3, 'l': 2, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1}]
6, 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

>>> letters
FancyCounter[{'e': 3, 'l': 2, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1}]
6, chúng ta sẽ nhận được chữ cái
>>> letters
FancyCounter[{'e': 3, 'l': 2, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1}]
8 [xuất hiện 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]

>>> letters.commonest[]
'e'

Phương thức

>>> letters
FancyCounter[{'e': 3, 'l': 2, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1}]
6 của chúng ta dựa trên phương thức
>>> letters['l'] = -2
>>> letters
FancyCounter[{'e': 3, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1, 'l': -2}]
1, 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

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

Lớp

>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
2 của chúng ta có một phương thức
>>> letters['l'] = -2
>>> letters
FancyCounter[{'e': 3, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1, 'l': -2}]
4 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

>>> letters['l'] = -2
>>> letters
FancyCounter[{'e': 3, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1, 'l': -2}]
6. 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
>>> letters['l'] = -2
>>> letters
FancyCounter[{'e': 3, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1, 'l': -2}]
7

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

>>> letters['l'] = -2
>>> letters
FancyCounter[{'e': 3, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1, 'l': -2}]
8 cho
>>> letters['l'] = -2
>>> letters
FancyCounter[{'e': 3, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1, 'l': -2}]
9, chúng tôi muốn nó được đặt thành
>>> letters['l'] = -2
>>> letters
FancyCounter[{'e': 3, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1, 'l': -2}]
7 thay vì
>>> letters['l'] = -2
>>> letters
FancyCounter[{'e': 3, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1, 'l': -2}]
9 [ở đây là
>>> letters['l'] = -2
>>> letters
FancyCounter[{'e': 3, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1, 'l': -2}]
9 vì chúng tôi chưa tùy chỉnh cái này]

>>> letters['l'] = -2
>>> letters['l']
-2

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

>>> letters['l'] = -2
>>> letters
FancyCounter[{'e': 3, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1, 'l': -2}]
6 chấp nhận
>>> letters.commonest[]
'e'
4,
>>> letters.commonest[]
'e'
5 và
>>> letters.commonest[]
'e'
6 vì đó là những gì ______16_______6 được cung cấp bởi Python khi nó được gọi

    def __setitem__[self, key, value]:
        value = max[0, value]

Phương pháp

>>> letters['l'] = -2
>>> letters
FancyCounter[{'e': 3, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1, 'l': -2}]
6 ở trên về cơ bản nói. nếu
>>> letters.commonest[]
'e'
6 là số âm, hãy đặt nó thành
>>> letters['l'] = -2
>>> letters
FancyCounter[{'e': 3, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1, 'l': -2}]
7

Nếu chúng ta ngừng viết

>>> letters['l'] = -2
>>> letters
FancyCounter[{'e': 3, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1, 'l': -2}]
6 vào thời điểm này, nó sẽ không hữu ích lắm. Thực tế là phương pháp
>>> letters['l'] = -2
>>> letters
FancyCounter[{'e': 3, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1, 'l': -2}]
6 sẽ chẳ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

>>> letters['l'] = -2
>>> letters
FancyCounter[{'e': 3, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1, 'l': -2}]
6 của lớp cha. Chúng ta có thể gọi phương thức
>>> letters['l'] = -2
>>> letters
FancyCounter[{'e': 3, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1, 'l': -2}]
6 của lớp cha bằng cách sử dụng
    def commonest[self]:
        [value1, count1], [value2, count2] = self.most_common[2]
        if count1 == count2:
            raise ValueError["No unique most common value"]
        return value1
5

    def __setitem__[self, key, value]:
        value = max[0, value]
        return super[].__setitem__[key, value]

Chúng ta đang gọi

    def commonest[self]:
        [value1, count1], [value2, count2] = self.most_common[2]
        if count1 == count2:
            raise ValueError["No unique most common value"]
        return value1
6, phương thức này sẽ gọi phương thức
>>> letters['l'] = -2
>>> letters
FancyCounter[{'e': 3, 'H': 1, 'o': 1, ' ': 1, 't': 1, 'h': 1, 'r': 1, '!': 1, 'l': -2}]
6 trên lớp cha của chúng ta [
>>> from fancy_counter import FancyCounter
>>> letters = FancyCounter["Hello there!"]
3] với
>>> letters.commonest[]
'e'
5 và giá trị không âm mới của chúng ta là
>>> letters.commonest[]
'e'
6

Đâ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 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
    def __setitem__[self, key, value]:
        value = max[0, value]
        return super[].__setitem__[key, value]

Để 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_______16_______7 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ủ Đề