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:
class Shark: animal_type = "fish" new_shark = Shark() print(new_shark.animal_type)
Hãy chạy chương trình:
- python shark.py
Outputfish
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:
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ả:
Outputfish 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, name
và age
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 :
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:
OutputSammy 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
:
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.
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:
OutputSammy 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
, sammy
và stevie
.
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ã.
Các tin liên quan
Hướng dẫn Dự báo chuỗi thời gian với ARIMA bằng Python 32017-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