Xin chào tất cả, Show
Lưu ý rằng hàm AngleTo lấy một thể hiện của chính Điểm làm đối số Tham số 8 là tham chiếu đến phiên bản hiện tại của lớp và được sử dụng để truy cập các biến thuộc về lớpNó không nhất thiết phải được đặt tên là 8 , bạn có thể gọi nó là gì tùy thích, nhưng nó phải là tham số đầu tiên của bất kỳ chức năng nào trong lớp Nếu bạn đang làm việc với Python, không thể thoát khỏi từ “bản thân”. Nó được sử dụng trong các định nghĩa phương thức và khởi tạo biến. Phương thức self được sử dụng rõ ràng mỗi khi chúng ta định nghĩa một phương thức. Trong bài viết này, chúng ta sẽ tìm hiểu sâu về self trong Python theo trình tự sau Việc sử dụng Self trong Python là gì?Bản thân được sử dụng để đại diện cho thể hiện của lớp. Với từ khóa này, bạn có thể truy cập các thuộc tính và phương thức của lớp trong python. Nó liên kết các thuộc tính với các đối số đã cho. Lý do tại sao chúng tôi sử dụng self là vì Python không sử dụng cú pháp '@' để chỉ các thuộc tính thể hiện. Tham gia khóa học lập trình Master Python của chúng tôi để biết thêm. Trong Python, chúng tôi có các phương thức làm cho cá thể được truyền tự động nhưng không được nhận tự động Thí dụ class food(): # init method or constructor def __init__(self, fruit, color): self.fruit = fruit self.color = color def show(self): print("fruit is", self.fruit) print("color is", self.color ) apple = food("apple", "red") grapes = food("grapes", "green") apple.show() grapes.show() đầu ra Fruit is apple color is red Fruit is grapes color is green Lớp Python tự xây dựngself cũng được sử dụng để chỉ một trường biến trong lớp. Hãy lấy một ví dụ và xem nó hoạt động như thế nào class Person: # name made in constructor def __init__(self, John): self.name = John def get_person_name(self): return self.name Trong ví dụ trên, self đề cập đến biến tên của toàn bộ lớp Person. Ở đây, nếu chúng ta có một biến trong một phương thức, self sẽ không hoạt động. Biến đó chỉ đơn giản tồn tại khi phương thức đó đang chạy và do đó, là cục bộ của phương thức đó. Để định nghĩa các trường toàn cục hoặc các biến của một lớp hoàn chỉnh, chúng ta cần định nghĩa chúng bên ngoài các phương thức của lớp Tìm hiểu khóa đào tạo Python của chúng tôi tại các thành phố/quốc gia hàng đầu Bản thân có phải là từ khóa không?bản thân được sử dụng ở những nơi khác nhau và thường được coi là một từ khóa. Nhưng không giống như trong C++, self không phải là một từ khóa trong Python self là một tham số trong hàm và người dùng có thể sử dụng một tên tham số khác thay cho nó. Mặc dù nên sử dụng self vì nó làm tăng khả năng đọc mã Thí dụ class this_is_class: def show(in_place_of_self): print("It is not a keyword " "and you can use a different keyword") object = this_is_class() object.show() đầu ra It is not a keyword and you can use a different keyword Với điều này, chúng tôi đã đi đến cuối bài viết của chúng tôi. Tôi hy vọng bạn đã hiểu cách sử dụng self và cách nó hoạt động trong Python Hãy xem khóa học Chứng chỉ Python của Edureka. Khóa đào tạo này được thiết kế dành cho sinh viên và chuyên gia muốn trở thành Lập trình viên Python. Khóa học được thiết kế để giúp bạn bắt đầu lập trình Python và đào tạo bạn về cả khái niệm cốt lõi và nâng cao Có một câu hỏi cho chúng tôi? Nếu bạn đã lập trình bằng Python (lập trình hướng đối tượng) một thời gian, thì bạn chắc chắn đã bắt gặp các phương thức có tham số đầu tiên là 3Trước tiên chúng ta hãy cố gắng hiểu tham số tự định kỳ này là gì Bản thân trong Python là gì?Trong lập trình hướng đối tượng, bất cứ khi nào chúng ta định nghĩa các phương thức cho một lớp, chúng ta sử dụng 3 làm tham số đầu tiên trong mỗi trường hợp. Hãy xem định nghĩa của một lớp có tên là 5
Trong trường hợp này, tất cả các phương thức, kể cả 6, đều có tham số đầu tiên là 3Chúng ta biết rằng lớp là bản thiết kế cho các đối tượng. Bản thiết kế này có thể được sử dụng để tạo ra nhiều đối tượng. Hãy tạo hai đối tượng khác nhau từ lớp trên
Từ khóa 3 được sử dụng để đại diện cho một thể hiện (đối tượng) của lớp đã cho. Trong trường hợp này, hai đối tượng 5 là class food(): # init method or constructor def __init__(self, fruit, color): self.fruit = fruit self.color = color def show(self): print("fruit is", self.fruit) print("color is", self.color ) apple = food("apple", "red") grapes = food("grapes", "green") apple.show() grapes.show()50 và class food(): # init method or constructor def __init__(self, fruit, color): self.fruit = fruit self.color = color def show(self): print("fruit is", self.fruit) print("color is", self.color ) apple = food("apple", "red") grapes = food("grapes", "green") apple.show() grapes.show()51 có thuộc tính riêng là class food(): # init method or constructor def __init__(self, fruit, color): self.fruit = fruit self.color = color def show(self): print("fruit is", self.fruit) print("color is", self.color ) apple = food("apple", "red") grapes = food("grapes", "green") apple.show() grapes.show()52 và class food(): # init method or constructor def __init__(self, fruit, color): self.fruit = fruit self.color = color def show(self): print("fruit is", self.fruit) print("color is", self.color ) apple = food("apple", "red") grapes = food("grapes", "green") apple.show() grapes.show()53. Nếu không có đối số tự, thì cùng một lớp không thể chứa thông tin cho cả hai đối tượng này Tuy nhiên, do lớp chỉ là một bản thiết kế nên 3 cho phép truy cập vào các thuộc tính và phương thức của từng đối tượng trong python. Điều này cho phép mỗi đối tượng có các thuộc tính và phương thức riêng. Do đó, thậm chí rất lâu trước khi tạo các đối tượng này, chúng tôi đã tham chiếu các đối tượng là 3 trong khi định nghĩa lớpTại sao bản thân được xác định rõ ràng mọi lúc?Ngay cả khi chúng ta hiểu cách sử dụng của 3, nó vẫn có vẻ kỳ lạ, đặc biệt là đối với các lập trình viên đến từ các ngôn ngữ khác, rằng 3 được truyền dưới dạng tham số một cách rõ ràng mỗi khi chúng ta định nghĩa một phương thức. Như The Zen of Python đã nói, "Rõ ràng tốt hơn ngầm"Vì vậy, tại sao chúng ta cần phải làm điều này? . Chúng ta có một lớp class food(): # init method or constructor def __init__(self, fruit, color): self.fruit = fruit self.color = color def show(self): print("fruit is", self.fruit) print("color is", self.color ) apple = food("apple", "red") grapes = food("grapes", "green") apple.show() grapes.show()58 định nghĩa một phương thức class food(): # init method or constructor def __init__(self, fruit, color): self.fruit = fruit self.color = color def show(self): print("fruit is", self.fruit) print("color is", self.color ) apple = food("apple", "red") grapes = food("grapes", "green") apple.show() grapes.show()59 để tính khoảng cách từ gốc tọa độ class food(): # init method or constructor def __init__(self, fruit, color): self.fruit = fruit self.color = color def show(self): print("fruit is", self.fruit) print("color is", self.color ) apple = food("apple", "red") grapes = food("grapes", "green") apple.show() grapes.show()5 Bây giờ chúng ta hãy khởi tạo lớp này và tìm khoảng cách Fruit is apple color is red Fruit is grapes color is green6 Trong ví dụ trên, Fruit is apple color is red Fruit is grapes color is green60 xác định ba tham số nhưng chúng tôi chỉ chuyển hai tham số (6 và 8). Tương tự, Fruit is apple color is red Fruit is grapes color is green61 yêu cầu một đối số nhưng không có đối số nào được thông qua. Tại sao Python không phàn nàn về số đối số này không khớp? Điều gì xảy ra trong nội bộ?Fruit is apple color is red Fruit is grapes color is green62 và Fruit is apple color is red Fruit is grapes color is green63 trong ví dụ trên là khác nhau và không hoàn toàn giống nhau class Person: # name made in constructor def __init__(self, John): self.name = John def get_person_name(self): return self.name1 Chúng ta có thể thấy rằng cái đầu tiên là một hàm và cái thứ hai là một phương thức. Một điều đặc biệt về các phương thức (trong Python) là chính đối tượng được truyền làm đối số đầu tiên cho hàm tương ứng Trong trường hợp của ví dụ trên, cuộc gọi phương thức Fruit is apple color is red Fruit is grapes color is green64 thực sự tương đương với Fruit is apple color is red Fruit is grapes color is green65 Nói chung, khi chúng ta gọi một phương thức với một số đối số, hàm lớp tương ứng được gọi bằng cách đặt đối tượng của phương thức trước đối số đầu tiên. Vì vậy, bất cứ điều gì như Fruit is apple color is red Fruit is grapes color is green66 trở thành Fruit is apple color is red Fruit is grapes color is green67. Quá trình gọi là tự động trong khi quá trình nhận thì không (rõ ràng) Đây là lý do tham số đầu tiên của hàm trong lớp phải là chính đối tượng đó. Viết tham số này là 3 chỉ là một quy ước. Nó không phải là từ khóa và không có ý nghĩa đặc biệt trong Python. Chúng tôi có thể sử dụng các tên khác (như Fruit is apple color is red Fruit is grapes color is green69) nhưng điều đó không được khuyến khích. Hầu hết các nhà phát triển đều phản đối việc sử dụng các tên khác với tên 3 và làm giảm khả năng đọc của mã (Số lượng khả năng đọc)Bản ngã có thể tránh đượcBây giờ bạn đã rõ rằng bản thân đối tượng (thể hiện) được truyền tự động dưới dạng đối số đầu tiên. Hành vi ngầm định này có thể tránh được khi tạo một phương thức tĩnh. Xét ví dụ đơn giản sau class Person: # name made in constructor def __init__(self, John): self.name = John def get_person_name(self): return self.name9 Ở đây, class Person: # name made in constructor def __init__(self, John): self.name = John def get_person_name(self): return self.name11 là một chức năng trang trí làm cho class Person: # name made in constructor def __init__(self, John): self.name = John def get_person_name(self): return self.name12 trở nên tĩnh. Hãy để chúng tôi khởi tạo lớp này và gọi phương thức class this_is_class: def show(in_place_of_self): print("It is not a keyword " "and you can use a different keyword") object = this_is_class() object.show()2 Từ ví dụ trên, chúng ta có thể thấy rằng hành vi ngầm truyền đối tượng làm đối số đầu tiên đã được tránh khi sử dụng một phương thức tĩnh. Nói chung, các phương thức tĩnh hoạt động giống như các hàm cũ đơn giản (Vì tất cả các đối tượng của một lớp đều chia sẻ các phương thức tĩnh) class this_is_class: def show(in_place_of_self): print("It is not a keyword " "and you can use a different keyword") object = this_is_class() object.show()3 Tự ở đây để ở lại 3 rõ ràng không phải là duy nhất đối với Python. Ý tưởng này được mượn từ Modula-3. Sau đây là trường hợp sử dụng khi nó trở nên hữu íchKhông có khai báo biến rõ ràng trong Python. Họ bắt đầu hành động trong nhiệm vụ đầu tiên. Việc sử dụng 3 giúp dễ dàng phân biệt giữa các thuộc tính thể hiện (và phương thức) với các biến cục bộTrong ví dụ đầu tiên, bản thân. x là một thuộc tính thể hiện trong khi x là một biến cục bộ. Chúng không giống nhau và chúng nằm trong các không gian tên khác nhau Nhiều người đã đề xuất biến self thành từ khóa trong Python, như class Person: # name made in constructor def __init__(self, John): self.name = John def get_person_name(self): return self.name15 trong C++ và Java. Điều này sẽ loại bỏ việc sử dụng thừa 3 rõ ràng khỏi danh sách tham số chính thức trong các phương thứcMặc dù ý tưởng này có vẻ hứa hẹn, nhưng nó sẽ không xảy ra. Ít nhất là không phải trong tương lai gần. Lý do chính là khả năng tương thích ngược. Đây là một blog từ chính người tạo ra Python giải thích lý do tại sao bản thân rõ ràng phải ở lại __init__() không phải là hàm tạoMột kết luận quan trọng có thể được rút ra từ thông tin cho đến nay là phương thức Fruit is apple color is red Fruit is grapes color is green60 không phải là hàm tạo. Nhiều lập trình viên Python ngây thơ bị nhầm lẫn với nó vì Fruit is apple color is red Fruit is grapes color is green60 được gọi khi chúng ta tạo một đối tượng Kiểm tra kỹ hơn sẽ thấy rằng tham số đầu tiên trong Fruit is apple color is red Fruit is grapes color is green60 chính là đối tượng (đối tượng đã tồn tại). Hàm Fruit is apple color is red Fruit is grapes color is green60 được gọi ngay sau khi đối tượng được tạo và được sử dụng để khởi tạo nó Về mặt kỹ thuật, hàm tạo là một phương thức tự tạo đối tượng. Trong Python, phương thức này là class Person: # name made in constructor def __init__(self, John): self.name = John def get_person_name(self): return self.name91. Một chữ ký phổ biến của phương pháp này là It is not a keyword and you can use a different keyword3 Khi class Person: # name made in constructor def __init__(self, John): self.name = John def get_person_name(self): return self.name91 được gọi, chính lớp đó sẽ tự động được chuyển thành đối số đầu tiên ( class Person: # name made in constructor def __init__(self, John): self.name = John def get_person_name(self): return self.name93) Một lần nữa, giống như bản thân, cls chỉ là một quy ước đặt tên. Ngoài ra, *args và **kwargs được sử dụng để lấy số lượng đối số tùy ý trong khi gọi phương thức trong Python Một số điều quan trọng cần nhớ khi triển khai class Person: # name made in constructor def __init__(self, John): self.name = John def get_person_name(self): return self.name91 là
Hãy xem một ví dụ 0Bây giờ, bây giờ chúng ta hãy khởi tạo nó 0Ví dụ này minh họa rằng class Person: # name made in constructor def __init__(self, John): self.name = John def get_person_name(self): return self.name91 được gọi trước Fruit is apple color is red Fruit is grapes color is green60. Chúng ta cũng có thể thấy rằng tham số cls trong class Person: # name made in constructor def __init__(self, John): self.name = John def get_person_name(self): return self.name91 chính là lớp đó ( class food(): # init method or constructor def __init__(self, fruit, color): self.fruit = fruit self.color = color def show(self): print("fruit is", self.fruit) print("color is", self.color ) apple = food("apple", "red") grapes = food("grapes", "green") apple.show() grapes.show()58). Cuối cùng, đối tượng được tạo bằng cách gọi phương thức class Person: # name made in constructor def __init__(self, John): self.name = John def get_person_name(self): return self.name91 trên lớp cơ sở đối tượng Trong Python, class this_is_class: def show(in_place_of_self): print("It is not a keyword " "and you can use a different keyword") object = this_is_class() object.show()23 là lớp cơ sở mà từ đó tất cả các lớp khác được dẫn xuất. Trong ví dụ trên, chúng tôi đã thực hiện việc này bằng cách sử dụng super() Sử dụng __new__ hay __init__?Bạn có thể đã thấy Fruit is apple color is red Fruit is grapes color is green60 rất thường xuyên nhưng việc sử dụng class Person: # name made in constructor def __init__(self, John): self.name = John def get_person_name(self): return self.name91 rất hiếm. Điều này là do hầu hết thời gian bạn không cần ghi đè lên nó. Nói chung, Fruit is apple color is red Fruit is grapes color is green60 được sử dụng để khởi tạo đối tượng mới được tạo trong khi class Person: # name made in constructor def __init__(self, John): self.name = John def get_person_name(self): return self.name91 được sử dụng để kiểm soát cách tạo đối tượng Chúng ta cũng có thể sử dụng class Person: # name made in constructor def __init__(self, John): self.name = John def get_person_name(self): return self.name91 để khởi tạo các thuộc tính của một đối tượng, nhưng theo logic thì nó phải nằm trong Fruit is apple color is red Fruit is grapes color is green60 Tuy nhiên, một cách sử dụng thực tế của class Person: # name made in constructor def __init__(self, John): self.name = John def get_person_name(self): return self.name91 có thể là hạn chế số lượng đối tượng được tạo từ một lớp Giả sử chúng ta muốn có một lớp class this_is_class: def show(in_place_of_self): print("It is not a keyword " "and you can use a different keyword") object = this_is_class() object.show()31 để tạo các thể hiện đại diện cho bốn đỉnh của một hình vuông. Chúng ta có thể kế thừa từ lớp trước class food(): # init method or constructor def __init__(self, fruit, color): self.fruit = fruit self.color = color def show(self): print("fruit is", self.fruit) print("color is", self.color ) apple = food("apple", "red") grapes = food("grapes", "green") apple.show() grapes.show()58 (ví dụ thứ hai trong bài viết này) và sử dụng class Person: # name made in constructor def __init__(self, John): self.name = John def get_person_name(self): return self.name91 để triển khai hạn chế này. Đây là một ví dụ để hạn chế một lớp chỉ có bốn trường hợp Tôi có thể tự gán lại Python không?Người ta có thể sử dụng phép tự gán trong một phương thức, để thay đổi lớp thể hiện thành lớp dẫn xuất. Tất nhiên người ta có thể gán nó cho một đối tượng mới, nhưng sau đó việc sử dụng đối tượng mới sẽ lan truyền qua phần còn lại của mã trong phương thức. Việc tự xác nhận lại nó, giữ nguyên phần còn lại của phương thức .
Tự vượt qua có nghĩa là gì trong Python?Tham số self là tham chiếu đến phiên bản hiện tại của lớp và được sử dụng để truy cập các biến thuộc về lớp .
Bạn có thể chuyển một biến cho một hàm trong Python không?Khi bạn truyền một biến cho hàm, python sẽ chuyển tham chiếu đến đối tượng mà biến tham chiếu (giá trị) . Không phải bản thân biến. Các hàm có một bảng biến cục bộ được gọi là không gian tên cục bộ. Biến x chỉ tồn tại trong hàm try_to_modify.
Tôi có thể sử dụng bản thân bên ngoài lớp Python không?Biến được định nghĩa bên trong lớp. Ví dụ – bản thân. var_name. Nếu bạn muốn sử dụng biến đó ngay cả bên ngoài lớp, bạn phải khai báo biến đó là biến toàn cục . Sau đó, biến có thể được truy cập bằng cách sử dụng tên của nó bên trong và bên ngoài lớp và không sử dụng thể hiện của lớp. |