Hướng dẫn what happens if you dont use self in python? - điều gì xảy ra nếu bạn không sử dụng self trong python?

Bạn có nên sử dụng self khi tham khảo hàm thành viên trong Python [trong cùng một mô -đun] không?

Tổng quát hơn, tôi đã tự hỏi khi nó được yêu cầu sử dụng self, không chỉ cho các phương thức mà còn cho các biến.

Agf

165K41 Huy hiệu vàng282 Huy hiệu bạc234 Huy hiệu Đồng41 gold badges282 silver badges234 bronze badges

Hỏi ngày 11 tháng 10 năm 2011 lúc 5:59Oct 11, 2011 at 5:59

Templardark Dark TemplarDark Templar

1.0993 huy hiệu vàng11 Huy hiệu bạc18 Huy hiệu đồng3 gold badges11 silver badges18 bronze badges

0

Thêm một câu trả lời vì Oskarbi không rõ ràng.

Bạn sử dụng self khi:

  1. Xác định một phương thức thể hiện. Nó được truyền tự động dưới dạng tham số đầu tiên khi bạn gọi một phương thức trên một thể hiện và đó là trường hợp mà phương thức được gọi.
  2. Tham khảo một thuộc tính lớp hoặc phiên bản từ bên trong một phương thức thể hiện. Sử dụng nó khi bạn muốn gọi một phương thức hoặc truy cập một tên [biến] trên thể hiện phương thức được gọi, từ bên trong phương thức đó.

Bạn không sử dụng self khi

  1. Bạn gọi một phương thức thể hiện bình thường. Sử dụng ví dụ của Oskarbi, nếu bạn làm instance = MyClass[], bạn sẽ gọi MyClass.my_methodinstance.my_method[some_var] không phải là instance.my_method[self, some_var].
  2. Bạn tham chiếu một thuộc tính lớp từ bên ngoài một phương thức thể hiện nhưng bên trong định nghĩa lớp.
  3. Bạn đang ở trong một staticmethod.

Đây không phải là những ví dụ khi không sử dụng bản thân. Các DOS là khi bạn nên sử dụng nó.

Chris Frisina

18.7K22 Huy hiệu vàng81 Huy hiệu bạc164 Huy hiệu đồng22 gold badges81 silver badges164 bronze badges

Đã trả lời ngày 11 tháng 10 năm 2011 lúc 6:51Oct 11, 2011 at 6:51

0

Sử dụng self để chỉ các biến và phương thức thể hiện từ các phương thức thể hiện khác. Cũng đặt self làm tham số đầu tiên trong định nghĩa của các phương thức thể hiện.

Một ví dụ:

class MyClass[object]:

    my_var = None

    def my_method[self, my_var]:
         self.my_var = my_var
         self.my_other_method[]

    def my_other_method[self]:
         # do something...

người đàn ông thiếc

157K41 Huy hiệu vàng210 Huy hiệu bạc298 Huy hiệu Đồng41 gold badges210 silver badges298 bronze badges

Đã trả lời ngày 11 tháng 10 năm 2011 lúc 6:09Oct 11, 2011 at 6:09

OskarbioskarbiOskarbi

3091 Huy hiệu bạc8 Huy hiệu đồng1 silver badge8 bronze badges

4

  1. Không có gì 'đặc biệt' về tên self. Đó là tên được ưu tiên bởi quy ước của Pythonistas, để chỉ ra những gì tham số đó dự kiến ​​sẽ chứa.nothing 'special' about the name self. It is the name preferred by convention by Pythonistas, to indicate what that parameter is expected to contain.

  2. Thời gian chạy Python sẽ vượt qua giá trị 'tự' khi bạn gọi một phương thức thể hiện trên một thể hiện, cho dù bạn có cố tình cung cấp cho nó hay không. Điều này thường sẽ dẫn đến một lỗi được chẩn đoán/hiểu dễ dàng [vì hàm sẽ được gọi với số lượng tham số sai], nhưng việc sử dụng self2 có thể dẫn đến các lỗi loại kỳ lạ hơn.

  3. Tham số được truyền ngầm khi bạn gọi một phương thức thể hiện trên một thể hiện. Nó chứa trường hợp mà bạn gọi phương thức. Vì vậy, bạn không đề cập đến self trong cuộc gọi chức năng bởi vì [a] như đã lưu ý ở trên, điều đó sẽ không có ý nghĩa gì [nói chung, không có phạm vi self, và self không phải là từ khóa hoặc tên đặc biệt hoặc bất cứ điều gì ]; [b] Bạn đã chỉ ra trường hợp sử dụng [bằng cách viết self6].

  4. Tất nhiên, bạn có thể gọi rõ ràng một phương thức thể hiện bằng cách truy cập nó từ lớp. Trong trường hợp này, bạn sẽ cần chuyển thể hiện rõ ràng là tham số đầu tiên. Bạn nói chung không muốn làm điều này. Và bạn đặc biệt không muốn viết mã xem xét khả năng tham số đầu tiên là một thứ khác được truyền rõ ràng theo cách này. Điều này giống như kiểm tra self7 trong C ++: bạn không làm điều đó, bởi vì nếu nó có thể có nghĩa là bất cứ điều gì, thì mã gọi là sai, về mặt đạo đức nếu không phải là hợp pháp. [Ít nhất là trong Python bạn sẽ không gặp vấn đề với hành vi không xác định, nhưng nó vẫn sai về mặt đạo đức.]especially don't want to write code that considers the possibility that the first parameter is something else that's been explicitly passed in this way. This is akin to checking self7 in C++: you don't do it, because if it could possibly mean anything, then the calling code is wrong, morally if not legally. [At least in Python you won't have problems with undefined behaviour, but it's still morally wrong.]

  5. Trong phương thức thể hiện, vì self là một tham số đã được gán phiên bản làm giá trị, bạn có thể viết self9 để truy cập các thuộc tính của thể hiện. Không giống như trong một số ngôn ngữ kiểu 'Insplict ____20' khác, các tên thuộc tính không ngầm định "trong phạm vi".not implicitly "in scope".

  6. Không có trường hợp sử dụng nào khác cho self, vì một lần nữa nó không phải là một cái tên đặc biệt và đó là một mục đích cụ thể mà quy ước đặt tên địa chỉ. Nếu bạn cần truy cập 'biến' [thực sự là một thuộc tính] từ một mô -đun khác, bạn sẽ sử dụng tên mô -đun. Nếu bạn muốn truy cập một từ mô -đun hiện tại, không cần tiền tố hoặc thực sự có thể cho vấn đề đó. [Chà, bạn có thể tìm kiếm nó một cách rõ ràng trong self2 được trả lại bởi self3, nhưng xin đừng làm điều đó.]could explicitly look it up in the self2 returned by self3, but please don't do that.]

Đã trả lời ngày 11 tháng 10 năm 2011 lúc 9:52Oct 11, 2011 at 9:52

Karl Knechtelkarl KnechtelKarl Knechtel

59.4K10 Huy hiệu vàng86 Huy hiệu bạc132 Huy hiệu đồng10 gold badges86 silver badges132 bronze badges

0

Ví dụ, biến và đối với các phương thức, bắt buộc phải sử dụng bản thân bất cứ lúc nào.

Đã trả lời ngày 11 tháng 10 năm 2011 lúc 6:04Oct 11, 2011 at 6:04

lc2817lc2817lc2817

3.70216 huy hiệu bạc38 Huy hiệu đồng16 silver badges38 bronze badges

5

Có cần thiết phải tự viết bằng Python không?

Tự đại diện cho trường hợp của lớp.Bằng cách sử dụng bản thân, chúng tôi 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 bạn cần sử dụng bản thân.là bởi vì Python không sử dụng @ Cú pháp để chỉ các thuộc tính thể hiện.The reason you need to use self. is because Python does not use the @ syntax to refer to instance attributes.

Mục đích của bản thân trong Python là gì?

Tham số tự là tham chiếu đến thể hiệ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.to access variables that belongs to the class.

Tự tùy chọn trong Python?

Python không buộc bạn sử dụng "bản thân".Bạn có thể cho nó bất cứ tên nào bạn muốn.Bạn chỉ cần nhớ rằng đối số đầu tiên trong tiêu đề định nghĩa phương thức là một tham chiếu đến đối tượng.. You can give it whatever name you want. You just have to remember that the first argument in a method definition header is a reference to the object.

Bài Viết Liên Quan

Chủ Đề