Trong lập trình hướng đối tượng, khi chúng tôi thiết kế một lớp, chúng tôi sử dụng các biến thể hiện và biến lớp.
Trong lớp, các thuộc tính có thể được xác định thành hai phần:
- Các biến thể hiện: Nếu giá trị của một biến thay đổi từ đối tượng này sang đối tượng khác, thì các biến đó được gọi là biến thể hiện.: If the value of a variable varies from object to object, then such variables are called instance variables.
- Các biến lớp: Một biến lớp là một biến được khai báo bên trong lớp, nhưng ngoài bất kỳ phương thức thể hiện nào hoặc & nbsp; ________ 19 & nbsp; phương thức.: A class variable is a variable that is declared inside of class, but outside of any instance method or
Emma 10 ABC School Jessa 20 ABC School
9 method.
Sau khi đọc bài viết này, bạn sẽ học::
- Cách tạo và truy cập các biến lớp
- Sửa đổi các giá trị của một biến lớp
- Biến trường hợp so với các biến lớp
- Hành vi của một biến lớp trong kế thừa
Một biến lớp trong Python là gì?
Nếu giá trị của một biến không thay đổi từ đối tượng sang đối tượng, các loại biến đó được gọi là biến lớp hoặc biến tĩnh.value of a variable is not varied from object to object, such types of variables are called class variables or static variables.
Các biến lớp được chia sẻ bởi tất cả các trường hợp của một lớp. Không giống như biến thể hiện, giá trị của biến lớp không được thay đổi từ đối tượng này sang đối tượng khác,shared by all instances of a class. Unlike instance variable, the value of a class variable is not varied from object to object,
Trong Python, các biến lớp được khai báo khi một lớp được xây dựng. Chúng không được xác định bên trong bất kỳ phương thức nào của một lớp vì chỉ có một bản sao của biến tĩnh sẽ được tạo và chia sẻ giữa tất cả các đối tượng của lớp.
Ví dụ, trong lớp học sinh, chúng ta có thể có các biến thể hiện khác nhau như tên và số cuộn vì mỗi tên và số cuộn của học sinh là khác nhau.
Nhưng, nếu chúng tôi muốn đưa tên trường vào lớp học sinh, chúng tôi phải sử dụng biến lớp thay vì biến thể hiện vì tên trường giống nhau cho tất cả học sinh. Vì vậy, thay vì duy trì bản sao riêng biệt trong mỗi đối tượng, chúng ta có thể tạo một biến lớp sẽ giữ tên trường để tất cả học sinh [đối tượng] có thể chia sẻ nó.
Chúng tôi có thể thêm bất kỳ số lượng biến lớp trong một lớp.
Tạo các biến lớp
Một biến lớp được khai báo bên trong lớp, nhưng ngoài bất kỳ phương thức ví dụ nào hoặc & nbsp; ________ 19 & nbsp; phương thức.
Theo quy ước, thông thường nó được đặt ngay bên dưới tiêu đề lớp và trước phương thức cấu trúc và các phương thức khác.
Example::
class Student:
# Class variable
school_name = 'ABC School '
def __init__[self, name, roll_no]:
self.name = name
self.roll_no = roll_no
# create first object
s1 = Student['Emma', 10]
print[s1.name, s1.roll_no, Student.school_name]
# access class variable
# create second object
s2 = Student['Jessa', 20]
# access class variable
print[s2.name, s2.roll_no, Student.school_name]
Đầu ra
Emma 10 ABC School Jessa 20 ABC School
Trong ví dụ trên, chúng tôi đã tạo biến lớp
class Student:
# Class variable
school_name = 'ABC School '
# constructor
def __init__[self, name]:
self.name = name
# access class variable inside constructor using self
print[self.school_name]
# access using class name
print[Student.school_name]
# create Object
s1 = Student['Emma']
1 và truy cập nó bằng tên đối tượng và tên lớp.Lưu ý: Giống như các biến thông thường, các biến lớp có thể lưu trữ dữ liệu thuộc bất kỳ loại nào. Chúng ta có thể sử dụng danh sách Python, Tuple Python và Dictiony Python như một biến lớp.: Like regular variables, class variables can store data of any type. We can use Python list, Python tuple, and Python dictionary as a class variable.
Truy cập các biến lớp
Chúng ta có thể truy cập các biến tĩnh bằng tên lớp hoặc theo tham chiếu đối tượng, nhưng nên sử dụng tên lớp.
Trong Python, chúng ta có thể truy cập biến lớp ở những nơi sau
- Truy cập bên trong hàm tạo bằng cách sử dụng tham số
2 hoặc tên lớp.class Student: # Class variable school_name = 'ABC School ' # constructor def __init__[self, name]: self.name = name # access class variable inside constructor using self print[self.school_name] # access using class name print[Student.school_name] # create Object s1 = Student['Emma']
- Truy cập biến lớp bên trong Phương thức thể hiện bằng cách sử dụng tên của lớp
- Truy cập từ bên ngoài lớp bằng cách sử dụng tham chiếu đối tượng hoặc tên lớp.
Ví dụ 1: Biến lớp truy cập trong hàm tạo: Access Class Variable in the constructor
class Student:
# Class variable
school_name = 'ABC School '
# constructor
def __init__[self, name]:
self.name = name
# access class variable inside constructor using self
print[self.school_name]
# access using class name
print[Student.school_name]
# create Object
s1 = Student['Emma']
Đầu ra
ABC School ABC School
Trong ví dụ trên, chúng tôi đã tạo biến lớp
1 và truy cập nó bằng tên đối tượng và tên lớp.: Access Class Variable in Instance
method and outside classclass Student:
# Class variable
school_name = 'ABC School '
# constructor
def __init__[self, name]:
self.name = name
# access class variable inside constructor using self
print[self.school_name]
# access using class name
print[Student.school_name]
# create Object
s1 = Student['Emma']
class Student:
# Class variable
school_name = 'ABC School '
# constructor
def __init__[self, name, roll_no]:
self.name = name
self.roll_no = roll_no
# Instance method
def show[self]:
print['Inside instance method']
# access using self
print[self.name, self.roll_no, self.school_name]
# access using class name
print[Student.school_name]
# create Object
s1 = Student['Emma', 10]
s1.show[]
print['Outside class']
# access class variable outside class
# access using object reference
print[s1.school_name]
# access using class name
print[Student.school_name]
Đầu ra
Inside instance method Emma 10 ABC School ABC School Outside class ABC School ABC School
Trong ví dụ trên, chúng tôi đã tạo biến lớp
class Student:
# Class variable
school_name = 'ABC School '
# constructor
def __init__[self, name]:
self.name = name
# access class variable inside constructor using self
print[self.school_name]
# access using class name
print[Student.school_name]
# create Object
s1 = Student['Emma']
1 và truy cập nó bằng tên đối tượng và tên lớp.Lưu ý: Giống như các biến thông thường, các biến lớp có thể lưu trữ dữ liệu thuộc bất kỳ loại nào. Chúng ta có thể sử dụng danh sách Python, Tuple Python và Dictiony Python như một biến lớp.
Truy cập các biến lớp
Chúng ta có thể truy cập các biến tĩnh bằng tên lớp hoặc theo tham chiếu đối tượng, nhưng nên sử dụng tên lớp.: We should change the class variable’s value using the class name only.
Trong Python, chúng ta có thể truy cập biến lớp ở những nơi sau
class Student:
# Class variable
school_name = 'ABC School '
# constructor
def __init__[self, name, roll_no]:
self.name = name
self.roll_no = roll_no
# Instance method
def show[self]:
print[self.name, self.roll_no, Student.school_name]
# create Object
s1 = Student['Emma', 10]
print['Before']
s1.show[]
# Modify class variable
Student.school_name = 'XYZ School'
print['After']
s1.show[]
Output::
Before Emma 10 ABC School After Emma 10 XYZ School
Note::
Truy cập bên trong hàm tạo bằng cách sử dụng tham số
class Student:
# Class variable
school_name = 'ABC School '
# constructor
def __init__[self, name]:
self.name = name
# access class variable inside constructor using self
print[self.school_name]
# access using class name
print[Student.school_name]
# create Object
s1 = Student['Emma']
2 hoặc tên lớp.Example::
class Student:
# Class variable
school_name = 'ABC School '
# constructor
def __init__[self, name, roll_no]:
self.name = name
self.roll_no = roll_no
# create Objects
s1 = Student['Emma', 10]
s2 = Student['Jessa', 20]
print['Before']
print[s1.name, s1.roll_no, s1.school_name]
print[s2.name, s2.roll_no, s2.school_name]
# Modify class variable using object reference
s1.school_name = 'PQR School'
print['After']
print[s1.name, s1.roll_no, s1.school_name]
print[s2.name, s2.roll_no, s2.school_name]
Output::
Before Emma 10 ABC School Jessa 20 ABC School After Emma 10 PQR School Jessa 20 ABC School
Truy cập biến lớp bên trong Phương thức thể hiện bằng cách sử dụng tên của lớp
Truy cập từ bên ngoài lớp bằng cách sử dụng tham chiếu đối tượng hoặc tên lớp.
Ví dụ 1: Biến lớp truy cập trong hàm tạo
Ví dụ 2: Biến lớp truy cập trong phương thức ví dụ và lớp bên ngoài
- Trong ví dụ này, chúng tôi đã truy cập biến lớp
1 bằng tên lớp và từ khóaclass Student: # Class variable school_name = 'ABC School ' # constructor def __init__[self, name]: self.name = name # access class variable inside constructor using self print[self.school_name] # access using class name print[Student.school_name] # create Object s1 = Student['Emma']
2 bên trong một phương thức.: Instance variable’s value varies from object to object. Instance variables are not shared by objects. Every object has its own copy of the instance attributeclass Student: # Class variable school_name = 'ABC School ' # constructor def __init__[self, name]: self.name = name # access class variable inside constructor using self print[self.school_name] # access using class name print[Student.school_name] # create Object s1 = Student['Emma']
- Sửa đổi các biến lớp: A class variable is a variable that is declared inside of class, but outside of any instance method or
Emma 10 ABC School Jessa 20 ABC School
9 method. Class variables are shared by all instances of a class.
Nói chung, chúng tôi gán giá trị cho một biến lớp bên trong khai báo lớp. Tuy nhiên, chúng ta có thể thay đổi giá trị của biến lớp trong lớp hoặc bên ngoài lớp.: Instance variables in Python with Examples
Đó là thực tiễn tốt nhất để sử dụng tên lớp để thay đổi giá trị của biến lớp. Bởi vì nếu chúng ta cố gắng thay đổi giá trị biến lớp của lớp bằng cách sử dụng một đối tượng, một biến thể hiện mới được tạo cho đối tượng cụ thể đó, trong đó làm mờ các biến lớp. | Các biến lớp được chia sẻ bởi tất cả các trường hợp. |
Các biến thể hiện được khai báo bên trong hàm tạo, tức là phương thức Emma 10 ABC School Jessa 20 ABC School9. | Các biến lớp được khai báo bên trong định nghĩa lớp nhưng ngoài bất kỳ phương thức và hàm tạo thể nào. |
Nó được tạo ra khi một thể hiện của lớp được tạo. | Nó được tạo ra khi chương trình bắt đầu thực thi. |
Các thay đổi được thực hiện cho các biến này thông qua một đối tượng sẽ không phản ánh trong một đối tượng khác. | Các thay đổi được thực hiện trong biến lớp sẽ phản ánh trong tất cả các đối tượng. |
Example::
Hãy cùng xem ví dụ để tạo biến lớp và biến thể hiện.
Emma 10 ABC School Jessa 20 ABC School0
Output::
Emma 10 ABC School Jessa 20 ABC School1
Các biến lớp trong kế thừa
Như bạn đã biết, chỉ có một bản sao của biến lớp sẽ được tạo và chia sẻ giữa tất cả các đối tượng của lớp đó.
Khi chúng ta sử dụng kế thừa, tất cả các biến và phương pháp của lớp cơ sở có sẵn cho lớp con. Trong những trường hợp như vậy, chúng ta cũng có thể thay đổi giá trị của biến lớp lớp cha trong lớp con.
Chúng ta có thể sử dụng tên lớp cha hoặc lớp con để thay đổi giá trị của biến lớp lớp cha trong lớp con.
Thí dụ
Emma 10 ABC School Jessa 20 ABC School2
Đầu ra
Emma 10 ABC School Jessa 20 ABC School3
Điều gì sẽ xảy ra nếu cả lớp con và lớp cha có cùng tên biến lớp. Trong trường hợp này, lớp con sẽ không kế thừa biến lớp của lớp cơ sở. Vì vậy, nên tạo một biến lớp riêng cho lớp con thay vì kế thừa biến lớp cơ sở.child class and parent class has the same class variable name. In this case, the child class will not inherit the class variable of a base class. So it is recommended to create a separate class variable for child class instead of inheriting the base class variable.
Example::
Emma 10 ABC School Jessa 20 ABC School4
Output::
Emma 10 ABC School Jessa 20 ABC School5
Sử dụng sai các biến lớp
Trong Python, chúng ta nên sử dụng đúng biến lớp vì tất cả các đối tượng chia sẻ cùng một bản sao. Do đó, nếu một trong các đối tượng sửa đổi giá trị của biến lớp, thì tất cả các đối tượng bắt đầu đề cập đến bản sao mới.
Ví dụ,
Thí dụ
Emma 10 ABC School Jessa 20 ABC School6
Đầu ra
Emma 10 ABC School Jessa 20 ABC School7
Điều gì sẽ xảy ra nếu cả lớp con và lớp cha có cùng tên biến lớp. Trong trường hợp này, lớp con sẽ không kế thừa biến lớp của lớp cơ sở. Vì vậy, nên tạo một biến lớp riêng cho lớp con thay vì kế thừa biến lớp cơ sở.
Sử dụng sai các biến lớp
Trong Python, chúng ta nên sử dụng đúng biến lớp vì tất cả các đối tượng chia sẻ cùng một bản sao. Do đó, nếu một trong các đối tượng sửa đổi giá trị của biến lớp, thì tất cả các đối tượng bắt đầu đề cập đến bản sao mới.
Ví dụ,
Trong ví dụ trên, biến thể hiện
class Student:
# Class variable
school_name = 'ABC School '
# constructor
def __init__[self, name]:
self.name = name
# access class variable inside constructor using self
print[self.school_name]
# access using class name
print[Student.school_name]
# create Object
s1 = Student['Emma']
7 là duy nhất cho mỗi người chơi. Biến lớp class Student:
# Class variable
school_name = 'ABC School '
# constructor
def __init__[self, name]:
self.name = name
# access class variable inside constructor using self
print[self.school_name]
# access using class name
print[Student.school_name]
# create Object
s1 = Student['Emma']
8 và class Student:
# Class variable
school_name = 'ABC School '
# constructor
def __init__[self, name]:
self.name = name
# access class variable inside constructor using self
print[self.school_name]
# access using class name
print[Student.school_name]
# create Object
s1 = Student['Emma']
9 có thể được truy cập và sửa đổi bởi bất kỳ đối tượng nào.Emma 10 ABC School Jessa 20 ABC School8