Hướng dẫn is it good to use classes in python? - sử dụng các lớp trong python có tốt không?

Các lớp học là trụ cột của lập trình hướng đối tượng. OOP rất quan tâm đến tổ chức mã, khả năng tái sử dụng và đóng gói.

Đầu tiên, từ chối trách nhiệm: OOP một phần trái ngược với lập trình chức năng, đây là một mô hình khác được sử dụng rất nhiều trong Python. Không phải tất cả mọi người lập trình bằng Python [hoặc chắc chắn hầu hết các ngôn ngữ] đều sử dụng OOP. Bạn có thể làm rất nhiều trong Java 8 mà không được định hướng đối tượng. Nếu bạn không muốn sử dụng OOP, thì đừng. Nếu bạn chỉ viết các tập lệnh một lần để xử lý dữ liệu mà bạn sẽ không bao giờ sử dụng nữa, thì hãy tiếp tục viết theo cách của bạn.

Tuy nhiên, có rất nhiều lý do để sử dụng OOP.

Một số lý do:

  • Tổ chức: OOP định nghĩa các cách mô tả và xác định cả dữ liệu và quy trình trong mã được biết đến và tiêu chuẩn. Cả dữ liệu và thủ tục có thể được lưu trữ ở các mức độ định nghĩa khác nhau [trong các lớp khác nhau] và có những cách tiêu chuẩn về việc nói về các định nghĩa này. Đó là, nếu bạn sử dụng OOP theo một cách tiêu chuẩn, nó sẽ giúp bản thân sau này và người khác hiểu, chỉnh sửa và sử dụng mã của bạn. Ngoài ra, thay vì sử dụng một cơ chế lưu trữ dữ liệu tùy ý, phức tạp [các dicts của các dicts hoặc danh sách hoặc dicts hoặc danh sách các dicts của các bộ, hoặc bất cứ điều gì], bạn có thể đặt tên cho các phần của cấu trúc dữ liệu và thuận tiện tham khảo chúng.

  • Trạng thái: OOP giúp bạn xác định và theo dõi trạng thái. Chẳng hạn, trong một ví dụ kinh điển, nếu bạn đang tạo một chương trình xử lý học sinh [ví dụ: một chương trình cấp lớp], bạn có thể giữ tất cả thông tin bạn cần về chúng ở một chỗ [tên, tuổi, giới tính, cấp lớp, cấp lớp, Các khóa học, lớp, giáo viên, đồng nghiệp, chế độ ăn uống, nhu cầu đặc biệt, v.v.], và dữ liệu này được duy trì miễn là đối tượng còn sống và có thể dễ dàng truy cập. Ngược lại, trong lập trình chức năng thuần túy, trạng thái không bao giờ bị đột biến tại chỗ.

  • Đóng gói: Với đóng gói, thủ tục và dữ liệu được lưu trữ cùng nhau. Các phương thức [một thuật ngữ OOP cho các hàm] được xác định ngay bên cạnh dữ liệu mà chúng hoạt động và sản xuất. Trong một ngôn ngữ như Java cho phép kiểm soát truy cập hoặc trong Python, tùy thuộc vào cách bạn mô tả API công khai của bạn, điều này có nghĩa là các phương thức và dữ liệu có thể được ẩn khỏi người dùng. Điều này có nghĩa là nếu bạn cần hoặc muốn thay đổi mã, bạn có thể làm bất cứ điều gì bạn muốn để thực hiện mã, nhưng giữ cho các API công khai giống nhau.

  • Kế thừa: Kế thừa cho phép bạn xác định dữ liệu và thủ tục ở một nơi [trong một lớp], sau đó ghi đè hoặc mở rộng chức năng đó sau. Chẳng hạn, trong Python, tôi thường thấy mọi người tạo các lớp con của lớp dict để thêm chức năng bổ sung. Một thay đổi chung đang ghi đè phương thức ném một ngoại lệ khi một khóa được yêu cầu từ một từ điển không tồn tại để đưa ra giá trị mặc định dựa trên khóa không xác định. Điều này cho phép bạn mở rộng mã của riêng mình ngay bây giờ hoặc muộn hơn, cho phép người khác mở rộng mã của bạn và cho phép bạn mở rộng mã của người khác.

  • Khả năng tái sử dụng: Tất cả những lý do này và các lý do khác cho phép tái sử dụng mã cao hơn. Mã định hướng đối tượng cho phép bạn viết mã rắn [đã kiểm tra] một lần, sau đó sử dụng lại nhiều lần. Nếu bạn cần điều chỉnh một cái gì đó cho trường hợp sử dụng cụ thể của mình, bạn có thể kế thừa từ một lớp hiện có và ghi đè lên hành vi hiện có. Nếu bạn cần thay đổi một cái gì đó, bạn có thể thay đổi tất cả trong khi duy trì chữ ký phương thức công khai hiện có và không ai là người khôn ngoan hơn [hy vọng].

Một lần nữa, có một số lý do để không sử dụng OOP, và bạn không cần. Nhưng may mắn thay với một ngôn ngữ như Python, bạn có thể sử dụng chỉ một chút hoặc rất nhiều, nó tùy thuộc vào bạn.

Một ví dụ về trường hợp sử dụng sinh viên [không đảm bảo về chất lượng mã, chỉ là một ví dụ]:

Đối tượng định hướng

class Student[object]:
    def __init__[self, name, age, gender, level, grades=None]:
        self.name = name
        self.age = age
        self.gender = gender
        self.level = level
        self.grades = grades or {}

    def setGrade[self, course, grade]:
        self.grades[course] = grade

    def getGrade[self, course]:
        return self.grades[course]

    def getGPA[self]:
        return sum[self.grades.values[]]/len[self.grades]

# Define some students
john = Student["John", 12, "male", 6, {"math":3.3}]
jane = Student["Jane", 12, "female", 6, {"math":3.5}]

# Now we can get to the grades easily
print[john.getGPA[]]
print[jane.getGPA[]]

Tiêu chuẩn

def calculateGPA[gradeDict]:
    return sum[gradeDict.values[]]/len[gradeDict]

students = {}
# We can set the keys to variables so we might minimize typos
name, age, gender, level, grades = "name", "age", "gender", "level", "grades"
john, jane = "john", "jane"
math = "math"
students[john] = {}
students[john][age] = 12
students[john][gender] = "male"
students[john][level] = 6
students[john][grades] = {math:3.3}

students[jane] = {}
students[jane][age] = 12
students[jane][gender] = "female"
students[jane][level] = 6
students[jane][grades] = {math:3.5}

# At this point, we need to remember who the students are and where the grades are stored. Not a huge deal, but avoided by OOP.
print[calculateGPA[students[john][grades]]]
print[calculateGPA[students[jane][grades]]]

Tôi có nên sử dụng các lớp học trong Python không?

Ưu điểm của việc sử dụng các lớp trong các lớp Python cung cấp một cách dễ dàng để giữ các thành viên dữ liệu và phương pháp cùng nhau ở một nơi giúp giữ cho chương trình được tổ chức nhiều hơn.Sử dụng các lớp cũng cung cấp một chức năng khác của mô hình lập trình hướng đối tượng này, nghĩa là kế thừa.Classes provide an easy way of keeping the data members and methods together in one place which helps in keeping the program more organized. Using classes also provides another functionality of this object-oriented programming paradigm, that is, inheritance.

Các lớp học có tốt hơn các chức năng trong Python không?

Mặc dù các lớp học hữu ích và mạnh mẽ, nhưng chúng không phải được sử dụng mọi lúc.[Điều này đang nói về các chức năng như là một phần của lập trình thủ tục và không lập trình chức năng.] Một trong những lợi ích chính của các lớp là chúng cho phép kế thừa. Functions, IMO, are easier to work with and understand than objects. [This is talking about functions as part of procedural programming and not functional programming.] One of the key benefits of classes is that they allow inheritance.

Một lợi ích chung của việc sử dụng các lớp học trong Python là gì?

Ưu điểm của việc sử dụng các lớp trong Python bằng cách sử dụng các lớp, việc duy trì các thành viên dữ liệu và phương pháp lại với nhau sẽ dễ dàng hơn nhiều và được cấu trúc ở một nơi.It is much easier to maintain the data members and methods together and structured in one place.

Bài Viết Liên Quan

Chủ Đề