Thứ hai, 27/03/2017 | 00:00 GMT+7

Hiểu các biến lớp và phiên bản trong Python 3

Lập trình hướng đối tượng cho phép các biến được sử dụng ở cấp lớp hoặc cấp thể hiện. Các biến về cơ bản là các ký hiệu đại diện cho một giá trị mà bạn đang sử dụng trong một chương trình.

Ở cấp độ lớp, các biến được gọi là biến lớp , trong khi các biến ở cấp độ cá thể được gọi là biến cá thể .

Khi ta mong đợi các biến sẽ nhất quán giữa các version hoặc khi ta muốn khởi tạo một biến, ta có thể xác định biến đó ở cấp độ lớp. Khi ta dự đoán các biến sẽ thay đổi đáng kể giữa các version , ta có thể xác định chúng ở cấp độ cá thể.

Một trong những nguyên tắc phát triển phần mềm là nguyên tắc KHÔ , viết tắt của không lặp lại chính mình . Nguyên tắc này hướng tới việc hạn chế sự lặp lại trong mã và lập trình hướng đối tượng tuân theo nguyên tắc DRY vì nó giảm bớt sự dư thừa.

Hướng dẫn này sẽ chứng minh việc sử dụng cả biến lớp và biến thể hiện trong lập trình hướng đối tượng trong Python.

Biến lớp

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

Được định nghĩa bên ngoài tất cả các phương thức, theo quy ước, các biến lớp thường được đặt ngay bên dưới tiêu đề lớp và trước phương thức khởi tạo và các phương thức khác.

Chỉ một biến lớp trông như thế này:

class Shark:     animal_type = "fish" 

Ở đây, biến animal_type được gán giá trị "fish" .

Ta có thể tạo một thể hiện của lớp Shark ( ta sẽ gọi nó là new_shark ) và in biến bằng cách sử dụng ký hiệu dấu chấm:

shark.py
class Shark:     animal_type = "fish"  new_shark = Shark() print(new_shark.animal_type) 

Hãy chạy chương trình:

  • python shark.py
Output
fish

Chương trình của ta trả về giá trị của biến.

Hãy thêm một vài biến lớp nữa và in chúng ra:

shark.py
class Shark:     animal_type = "fish"     location = "ocean"     followers = 5  new_shark = Shark() print(new_shark.animal_type) print(new_shark.location) print(new_shark.followers) 

Cũng giống như với bất kỳ biến nào khác, biến lớp có thể bao gồm bất kỳ kiểu dữ liệu nào có sẵn cho ta trong Python. Trong chương trình này, ta có chuỗi và một số nguyên. Hãy chạy lại chương trình bằng lệnh python shark.py và xem kết quả:

Output
fish ocean 5

Ví dụ của new_shark có thể truy cập vào tất cả các biến lớp và in chúng ra khi ta chạy chương trình.

Các biến lớp cho phép ta xác định các biến khi xây dựng lớp. Các biến này và các giá trị liên quan của chúng sau đó có thể truy cập được đối với từng cá thể của lớp.

Biến thể hiện

Các biến cá thể được sở hữu bởi các cá thể của lớp. Điều này nghĩa là đối với mỗi đối tượng hoặc cá thể của một lớp, các biến cá thể là khác nhau.

Không giống như các biến lớp, các biến cá thể được định nghĩa trong các phương thức.

Trong ví dụ về lớp Shark dưới đây, nameage là các biến version :

class Shark:     def __init__(self, name, age):         self.name = name         self.age = age 

Khi ta tạo một đối tượng Shark , ta sẽ phải xác định các biến này, các biến này được truyền dưới dạng tham số trong phương thức khởi tạo hoặc một phương thức khác.

class Shark:     def __init__(self, name, age):         self.name = name         self.age = age  new_shark = Shark("Sammy", 5) 

Giống như với các biến lớp, ta có thể gọi tương tự để in các biến version :

shark.py
class Shark:     def __init__(self, name, age):         self.name = name         self.age = age  new_shark = Shark("Sammy", 5) print(new_shark.name) print(new_shark.age) 

Khi ta chạy chương trình trên với python shark.py , ta sẽ nhận được kết quả sau:

Output
Sammy 5

Đầu ra mà ta nhận được tạo thành từ các giá trị của các biến mà ta đã khởi tạo cho version đối tượng của new_shark .

Hãy tạo một đối tượng khác của lớp Shark tên là stevie :

shark.py
class Shark:     def __init__(self, name, age):         self.name = name         self.age = age  new_shark = Shark("Sammy", 5) print(new_shark.name) print(new_shark.age)  stevie = Shark("Stevie", 8) print(stevie.name) print(stevie.age) 

Đối tượng stevie , như đối tượng new_shark chuyển các tham số cụ thể cho version đó của lớp Shark để gán giá trị cho các biến cá thể.

Các biến cá thể, thuộc sở hữu của các đối tượng của lớp, cho phép mỗi đối tượng hoặc cá thể có các giá trị khác nhau được gán cho các biến đó.

Làm việc với các biến Class và Instance cùng nhau

Các biến lớp và biến cá thể thường sẽ được sử dụng cùng lúc, vì vậy hãy xem ví dụ về điều này bằng cách sử dụng lớp Shark mà ta đã tạo. Các comment trong chương trình phác thảo từng bước của quy trình.

shark.py
class Shark:      # Class variables     animal_type = "fish"     location = "ocean"      # Constructor method with instance variables name and age     def __init__(self, name, age):         self.name = name         self.age = age      # Method with instance variable followers     def set_followers(self, followers):         print("This user has " + str(followers) + " followers")   def main():     # First object, set up instance variables of constructor method     sammy = Shark("Sammy", 5)      # Print out instance variable name     print(sammy.name)      # Print out class variable location     print(sammy.location)      # Second object     stevie = Shark("Stevie", 8)      # Print out instance variable name     print(stevie.name)      # Use set_followers method and pass followers instance variable     stevie.set_followers(77)      # Print out class variable animal_type     print(stevie.animal_type)  if __name__ == "__main__":     main()  

Khi ta chạy chương trình với python shark.py , ta sẽ nhận được kết quả sau:

Output
Sammy ocean Stevie This user has 77 followers fish

Ở đây, ta đã sử dụng cả biến lớp và biến thể hiện trong hai đối tượng của lớp Shark , sammystevie .

Kết luận

Trong lập trình hướng đối tượng, các biến ở cấp độ lớp được gọi là biến lớp, trong khi các biến ở cấp đối tượng được gọi là biến thể hiện.

Sự khác biệt này cho phép ta sử dụng các biến lớp để khởi tạo các đối tượng với một giá trị cụ thể được gán cho các biến và sử dụng các biến khác nhau cho từng đối tượng với các biến thể hiện.

Việc sử dụng các biến của lớp và trường hợp cụ thể có thể đảm bảo mã của ta tuân theo nguyên tắc DRY để giảm sự lặp lại trong mã.


Tags:

Các tin liên quan

Hướng dẫn Dự báo chuỗi thời gian với ARIMA bằng Python 3
2017-03-23
Cách tạo lớp và xác định đối tượng trong Python 3
2017-03-17
Hướng dẫn về image hóa chuỗi thời gian với Python 3
2017-03-14
Cách viết comment bằng Python 3
2017-03-03
Cách xác định hàm trong Python 3
2017-02-28
Phân tích và trực quan hóa dữ liệu với pandas và notebook Jupyter bằng Python 3
2017-02-23
Cách vẽ biểu đồ tần suất từ bằng matplotlib với Python 3
2017-02-17
Cách cài đặt gói pandas và làm việc với cấu trúc dữ liệu trong Python 3
2017-02-10
Cách cài đặt gói pandas và làm việc với cấu trúc dữ liệu trong Python 3
2017-02-10
Cách cài đặt gói pandas và làm việc với cấu trúc dữ liệu trong Python 3
2017-02-10