Biến lớp trong Python là gì?

Trong lập trình, một biến là một đại diện của một phần dữ liệu. biến có thể được đặt tên theo hầu hết mọi thứ — và giá trị được lưu trữ trong biến có thể là bất cứ thứ gì. Tên biến không được bắt đầu bằng số và phải là chữ và số. Đây là ví dụ về biến trong Python

>>> x = 40
>>> x
40
>>> y = 75
>>> y
75
>>> z = x + y #<—Combining variables to store in a new variable
>>> my_car = "Chevy Impala"
>>> my_car_milate = 10000.21
>>> "My car is a " + my_car + " and it's milage is at " + str(my_car_mileage)
"My car is a Chevy Impala and it's milage is at 1122.1"
>>>

Như được minh họa trong ví dụ trên, một biến thực sự có thể chứa bất kỳ thứ gì — từ số nguyên đến số thập phân cho đến từ

Python là ngôn ngữ lập trình hướng đối tượng (OOP), nghĩa là các lớp được sử dụng để biểu diễn cấu trúc của dữ liệu mà chúng ta muốn thao tác. Đối với OOP, các biến có thể được lưu trữ ở hai dạng. biến thể hiện và biến lớp. Có nền tảng vững chắc về Lập trình hướng đối tượng sẽ giúp việc học Python trở nên dễ dàng hơn rất nhiều


Khóa học trực tuyến

Python 3 Chuỗi, Danh sách và Từ điển


  • 27 Video
  • Luyện thi
  • huấn luyện
  • câu đố

HÀNG THÁNG

USD/người học/tháng

HÀNG NĂM

USD/người học/tháng

Xem bây giờ


Lớp học là gì

Một lớp là một đại diện của dữ liệu chúng tôi muốn sử dụng trong ngôn ngữ lập trình. Hãy nghĩ về nó như một cách lưu trữ dữ liệu liên quan theo cách hợp lý. Một lớp đóng vai trò là bản thiết kế để xây dựng các đối tượng và các đối tượng này thường được lưu trữ trong các biến và được chuyển qua chương trình. Hãy xem một ví dụ nhanh

>>> class Dog:
…        def bark(self):
…                print "I"m a dog. Bark bark!"
…        def woof(self):
…                print "I'm a BIG dog. WOOF WOOF."
…        def yip(self):
…                print "I'm a little dog. YIP YIP."
>>> saint_bernard = Dog() #<—Creating an instance of the class.
>>> saint_bernard.woof()
>>> I'm a BIG dog. WOOF WOOF.
>>> chow_chow = Dog()
>>> chow_chow.bark()
I'm a dog. Bark bark!

Trong ví dụ trên, chúng ta đang tạo một lớp có tên là Chó. Dog là một lớp đơn giản có ba phương thức. vỏ cây, yip, và gâu gâu. Hãy nghĩ về một phương pháp như một công thức. Nó nhận tham số hoặc không có tham số trong trường hợp này và thực hiện một số thao tác liên quan đến lớp

Sau khi tạo lớp, chúng tôi khởi tạo lớp. Tôi. E, đã lưu trữ nó trong một biến có tên là Saint_bernard và chow_chow. Sau khi khởi tạo lớp, chúng tôi đã gọi hai phương thức, phương thức này sẽ in ra các từ mà chúng tôi đã lập trình trước đó. Vì vậy, tất cả những điều này có liên quan gì đến các biến?

>>>class Dog:
…        legs = 4 #<— class variable
…        def bark(self):
                print "I’m a dog. Bark bark!"

Biến lớp là gì?

Một biến lớp là một biến có phạm vi cho toàn bộ lớp. Trong khoa học máy tính, phạm vi của biến là vùng hoặc không gian tên trong đó liên kết biến hợp lệ. Vì vậy, điều đó có nghĩa là tất cả các phương thức trong một lớp sẽ có thể sử dụng các biến lớp. Hãy xem nó hoạt động bằng cách viết lại hoặc lớp Dog từ trước đó

>>> poodle = Dog()
>>> labrador = Dog()
>>> poodle.legs
4
>>> labrador.legs
4

Trên đây là một ví dụ về một biến lớp gọi là chân. Nói chung, một biến lớp sẽ là thứ không thay đổi thường xuyên. Thuộc tính đặc biệt của đối tượng lớp là việc thay đổi nó sẽ ảnh hưởng đến mọi phiên bản của lớp đó được tạo. Đây là con dao hai lưỡi, vì một mặt nó có thể thuận tiện vì nó sẽ thay đổi tất cả các đối tượng đã được tạo. Mặt khác, nó có thể phá vỡ một số logic kinh doanh dựa trên biến đó không bao giờ thay đổi. Hãy nhảy vào một số mã

Chúng tôi đã tạo hai phiên bản của lớp Dog. một được gọi là poodle và Labrador khác

>>> Dog.legs = 5
>>> Dog.legs
5
>>> poodle.legs
5
>>> labrador.legs
5

Sau đó chúng tôi gọi biến lớp. Tuy nhiên, nếu con chó xù bằng một phép màu nào đó mọc thêm một chân thì sao?

>> class Dog:
        legs = 4 #<–class variable
        def __init__(self, name, breed, age):
                self.name = name #<—instance variable
                self.breed = breed #<—instance variable
                self.age = age #<—instance variable.

Uh-oh. Bạn có thể nhận ra những gì đã xảy ra? . Vì vậy, để

lái nó về nhà, điều thực sự quan trọng là không thay đổi biến lớp trừ khi bạn muốn thay đổi nó cho mọi đối tượng được khởi tạo

Như đã nói, đây là cách nó sẽ được thay đổi chỉ dành cho chó xù

>>> poodle.legs = 5
>>> poodle.legs
5
>>> labrador.leg
5
>>> poodle.__class__.legs

Trong ví dụ này, chúng tôi đã thay đổi số lượng chân trên đối tượng riêng lẻ được gọi là poodle

Như bạn có thể thấy, nó không ảnh hưởng đến chó Labrador. Tuy nhiên, điều quan trọng cần lưu ý là việc thay đổi nó trên poodle không thực sự thay đổi chính biến lớp đó. Cuộc gọi cuối cùng là trên chính biến lớp

Nói cách khác, mỗi đối tượng có một thể hiện của biến lớp. Hy vọng rằng bạn thấy chúng ta đang đi đến đâu với điều này, vì vậy hãy tìm hiểu sâu hơn về các biến thể hiện

Biến thể hiện là gì?

Một biến thể hiện là một biến chỉ nằm trong phạm vi khởi tạo cụ thể của một lớp. Đây là một số mã để minh họa một biến thể hiện

>>> class Dog:
        legs = 4 #<—class variable
        def __init__(self, name, breed, age):
                self.name = name #<—instance variable
                self.breed = breed
                self.age = age

Trong phiên bản cải tiến của lớp Dog, chúng tôi đã tạo một trình khởi tạo với ba biến thể hiện. Một trình khởi tạo có thể được sử dụng để thực hiện tiền xử lý trên một lớp mới được khởi tạo, cũng như điền vào các biến thể hiện như vậy

________số 8_______

Có rất nhiều thứ đang diễn ra trong đoạn mã này, vì vậy hãy chia nhỏ nó ra một chút. Chúng tôi đã tạo hai đối tượng Dog. chó1 và chó2. Chúng tôi đã gọi hai biến thể hiện của chúng, biến này cung cấp cho chúng tôi thông tin mà chúng tôi đã cung cấp trước đó

Sau đó, chúng tôi gọi Chó. chân, tự nhiên cung cấp số bốn. Tuy nhiên, lưu ý rằng Chó. giống đã ném một lỗi. Đó là vì biến giống chỉ có sẵn dưới dạng biến thể hiện. Nó không được chia sẻ trên toàn bộ lớp học

Đây là một cách tốt để tổng hợp các mối quan hệ. một biến lớp được chia sẻ bởi tất cả các đối tượng được tạo. Một thể hiện của biến lớp luôn được tạo trên mỗi đối tượng mới được tạo; . Cuối cùng, một biến thể hiện chỉ có thể truy cập được đối với đối tượng mà nó được xác định trong

Cách ngăn chặn đột biến biến lớp

Cảnh báo. Đoạn mã sau sẽ chỉ hoạt động trong Python 3. x

Trong khoa học máy tính, việc thay đổi các biến được gọi là đột biến. Nếu một đối tượng hoặc biến không thể thay đổi, nó được gọi là bất biến. Thông thường, bạn không muốn mọi người truy cập mã của mình và thay đổi các biến lớp. Khi mã ngày càng phức tạp hơn, việc thay đổi thứ gì đó với phạm vi rộng như vậy có thể gây ra nhiều hậu quả khác nhau. May mắn thay, Python có cách khắc phục điều đó. Nó cao hơn một chút về mặt nâng cao, nhưng nó đáng để xem qua

Đầu tiên, tạo một lớp với một biến lớp mà bạn không bao giờ muốn bất kỳ ai thay đổi. Hãy đối mặt với nó. bản chất của một con chó là có bốn chân, vì vậy chúng tôi sẽ biến điều này thành một đặc điểm bất biến trong mã của chúng tôi. Đây là một ví dụ

class CantChangeClassVariable(type):
        def __setattr__(self, key, value):
                raise ValueError(key)
class Dog(metaclass=CantChangeClasssVariable):
        legs = 4
        def __init__(self, name, breed, age):
                self.name = name
                self.breed = breed
                self.age = age

Không có gì quá đặc biệt về lớp Chó, ngoại trừ một vài điều. Điều đầu tiên là metaclass=CantChangeClassVariable. Siêu lớp là một cách mô tả cách lớp nên hoạt động trong một số tình huống nhất định. Trong trường hợp này, tôi đã viết một lớp đơn giản gọi là CantChangeVariable. Bất cứ khi nào một biến lớp được thay đổi, hãy tăng Lỗi Giá trị. Đây là cách nó trông trong hành động

>>> class Dog:
…        def bark(self):
…                print "I"m a dog. Bark bark!"
…        def woof(self):
…                print "I'm a BIG dog. WOOF WOOF."
…        def yip(self):
…                print "I'm a little dog. YIP YIP."
>>> saint_bernard = Dog() #<—Creating an instance of the class.
>>> saint_bernard.woof()
>>> I'm a BIG dog. WOOF WOOF.
>>> chow_chow = Dog()
>>> chow_chow.bark()
I'm a dog. Bark bark!
0

Và bây giờ là kết quả tiếp theo

>>> class Dog:
…        def bark(self):
…                print "I"m a dog. Bark bark!"
…        def woof(self):
…                print "I'm a BIG dog. WOOF WOOF."
…        def yip(self):
…                print "I'm a little dog. YIP YIP."
>>> saint_bernard = Dog() #<—Creating an instance of the class.
>>> saint_bernard.woof()
>>> I'm a BIG dog. WOOF WOOF.
>>> chow_chow = Dog()
>>> chow_chow.bark()
I'm a dog. Bark bark!
1

Như bạn có thể thấy, nó đã tạo ra một ValueError khi cố gắng thay đổi biến lớp. Mặt khác, thay đổi biến thể hiện là tốt

Suy nghĩ cuối cùng

Hiểu sự khác biệt giữa biến lớp và biến thể hiện là điều cơ bản. Mặc dù ban đầu có vẻ phức tạp, nhưng bạn càng làm việc với dữ liệu nhiều thì bạn sẽ càng thấy rõ khi nào nên sử dụng biến nào. Chúc may mắn với hành trình Python của bạn

Các biến lớp là gì?

Trong lập trình hướng đối tượng, dựa trên lớp, một biến lớp là một biến được định nghĩa trong một lớp mà một bản sao tồn tại, bất kể có bao nhiêu phiên bản của lớp đó. . Một biến lớp không phải là một biến thể hiện. Nó là một loại thuộc tính lớp đặc biệt (hoặc thuộc tính lớp, trường hoặc thành viên dữ liệu). . A class variable is not an instance variable. It is a special type of class attribute (or class property, field, or data member).

Các biến lớp được định nghĩa Python ở đâu?

Các biến lớp được định nghĩa trong cấu trúc lớp . Bởi vì chúng được sở hữu bởi chính lớp, các biến lớp được chia sẻ bởi tất cả các phiên bản của lớp. Do đó, chúng thường sẽ có cùng giá trị cho mọi phiên bản trừ khi bạn đang sử dụng biến lớp để khởi tạo một biến.

Biến lớp và biến thể hiện trong Python là gì?

Sự khác biệt giữa Biến thể hiện và Biến lớp

Các loại biến trong lớp trong Python là gì?

Một lớp Python có thể có hai loại biến. Biến thể hiện và biến lớp .