Hướng dẫn what is __ len __( self in python? - __ len __ (tự trong python là gì?

38

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Chỉ tò mò,

Có bất kỳ sự khác biệt nào [ưu điểm và nhược điểm] giữa việc sử dụng len[] hoặc def __len__[] khi tôi xây dựng một lớp? Và đó là phong cách Python tốt nhất?

   class foo[object]:
      def __init__[self,obs=[]]
         self.data = obs
         self.max = max[obs]
         self.min = min[obs]
         self.len = len[obs]

hoặc

   class foo[object]:
      def __init__[self,obs=[]]
         self.data = obs
         self.max = max[obs]
         self.min = min[obs]
      def __len__[self]:
         return len[self.data]

GLGLGL

86.8K12 Huy hiệu vàng146 Huy hiệu bạc214 Huy hiệu đồng12 gold badges146 silver badges214 bronze badges

Đã hỏi ngày 27 tháng 2 năm 2013 lúc 14:03Feb 27, 2013 at 14:03

Gianni Speargianni SpearGianni Spear

6.66119 Huy hiệu vàng80 Huy hiệu bạc123 Huy hiệu Đồng19 gold badges80 silver badges123 bronze badges

3

Có một sự khác biệt lớn.

Phương pháp __len__[] là một phương thức hook. Hàm len[] sẽ sử dụng phương thức

   class foo[object]:
      def __init__[self,obs=[]]
         self.data = obs
         self.max = max[obs]
         self.min = min[obs]
      def __len__[self]:
         return len[self.data]
0 nếu có để truy vấn đối tượng của bạn cho độ dài của nó.

Những người API bình thường mong đợi sử dụng là phương thức len[], sử dụng thuộc tính

   class foo[object]:
      def __init__[self,obs=[]]
         self.data = obs
         self.max = max[obs]
         self.min = min[obs]
      def __len__[self]:
         return len[self.data]
2 thay vào đó sẽ đi chệch khỏi định mức đó.

Nếu độ dài của

   class foo[object]:
      def __init__[self,obs=[]]
         self.data = obs
         self.max = max[obs]
         self.min = min[obs]
      def __len__[self]:
         return len[self.data]
3 dự kiến ​​sẽ không thay đổi, bạn luôn có thể lưu trữ độ dài trong một thuộc tính và có
   class foo[object]:
      def __init__[self,obs=[]]
         self.data = obs
         self.max = max[obs]
         self.min = min[obs]
      def __len__[self]:
         return len[self.data]
4 trả về thuộc tính đó.

class foo[object]:
    def __init__[self, obs=None]:
        if obs is None:  # provide a default if no list was passed in.
            obs = []
        self.data = obs
        self.max = max[obs]
        self.min = min[obs]
        self._data_len = len[obs]

    def __len__[self]:
        return self._data_len

Đã trả lời ngày 27 tháng 2 năm 2013 lúc 14:04Feb 27, 2013 at 14:04

Martijn Pieters ♦ Martijn PietersMartijn Pieters

991K276 Huy hiệu vàng3901 Huy hiệu bạc3252 Huy hiệu Đồng276 gold badges3901 silver badges3252 bronze badges

0

Có một số khác biệt:

  1. Chỉ có cách tiếp cận thứ hai sẽ cung cấp cho bạn cú pháp
       class foo[object]:
          def __init__[self,obs=[]]
             self.data = obs
             self.max = max[obs]
             self.min = min[obs]
          def __len__[self]:
             return len[self.data]
    
    5 quen thuộc cho
       class foo[object]:
          def __init__[self,obs=[]]
             self.data = obs
             self.max = max[obs]
             self.min = min[obs]
          def __len__[self]:
             return len[self.data]
    
    6. Đầu tiên sẽ yêu cầu
       class foo[object]:
          def __init__[self,obs=[]]
             self.data = obs
             self.max = max[obs]
             self.min = min[obs]
          def __len__[self]:
             return len[self.data]
    
    7.
  2. Nếu độ dài của
       class foo[object]:
          def __init__[self,obs=[]]
             self.data = obs
             self.max = max[obs]
             self.min = min[obs]
          def __len__[self]:
             return len[self.data]
    
    3 có thể thay đổi sau xây dựng, chỉ có phiên bản thứ hai sẽ phản ánh độ dài mới.

Đã trả lời ngày 27 tháng 2 năm 2013 lúc 14:05Feb 27, 2013 at 14:05

Xem thảo luận

Cải thiện bài viết

Lưu bài viết

  • Đọc
  • Bàn luận
  • Xem thảo luận

    Cải thiện bài viết

    Lưu bài viết

    Đọcis one of the various magic methods in Python programming language, it is basically used to implement the len[] function in Python because whenever we call the len[] function then internally __len__ magic method is called. It finally returns an integer value that is greater than or equal to zero as it represents the length of the object for which it is called. 

    Bàn luận

    Python __len__ là một trong những phương pháp ma thuật khác nhau trong ngôn ngữ lập trình Python, về cơ bản, nó được sử dụng để thực hiện hàm Len [] trong Python vì bất cứ khi nào chúng ta gọi hàm Len [] thì phương pháp ma thuật nội bộ __len__ được gọi. Cuối cùng, nó trả về một giá trị số nguyên lớn hơn hoặc bằng 0 vì nó biểu thị độ dài của đối tượng mà nó được gọi là. & NBSP;

    • Python __len __ [] chức năng cú pháp It is the object whose length is to be determined.                 

    Cú pháp: Đối tượng .__ Len __ []Returns a non negative integer.

    Đối tượng: Đó là đối tượng có độ dài được xác định. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;

    Trả về: Trả về một số nguyên không âm.object we are iterating already has  __len__ method defined internally, then len function gives the correct result for the object i.e.

    Python3

    Python __len __ [] Ví dụ chức năng

    Khi đối tượng chúng ta lặp lại đã có & nbsp; __ len__ phương thức được xác định bên trong, thì hàm LEN cho kết quả chính xác cho đối tượng, tức là.

       class foo[object]:
          def __init__[self,obs=[]]
             self.data = obs
             self.max = max[obs]
             self.min = min[obs]
          def __len__[self]:
             return len[self.data]
    
    9
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    0

    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    1
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    2
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    3
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    4
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    5

    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    6
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    4
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    8
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    9
    13
    0

    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    1
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    2
    13
    3
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    4
    13
    5

    1
    7
    13
    9
    13
    8
    TypeError                                 Traceback [most recent call last]
     in 
         3 
         4 obj = Length[]
    ----> 5 print[len[obj]]
    TypeError: object of type 'Length' has no len[]
    0

    Output:

    13

    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    6
    13
    7
    13
    8
    13
    9
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    4
    1
    1

    1
    2
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    9
    1
    4
    1
    5
    1
    6nction it gives a TypeError, but it can be corrected by defining a __len__ method by our own,

    Python3

    Python __len __ [] Ví dụ chức năng

    Khi đối tượng chúng ta lặp lại đã có & nbsp; __ len__ phương thức được xác định bên trong, thì hàm LEN cho kết quả chính xác cho đối tượng, tức là.

       class foo[object]:
          def __init__[self,obs=[]]
             self.data = obs
             self.max = max[obs]
             self.min = min[obs]
          def __len__[self]:
             return len[self.data]
    
    9
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    0

    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    1
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    2
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    3
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    4
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    5

    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    6
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    4
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    8
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    9
    13
    0

    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    1
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    2
    13
    3
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    4
    13
    5

    1
    7def __len__[]7

    Output:

    1

    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    6
    13
    7
    13
    8
    13
    9
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    4
    1
    1

    1
    2
    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    9
    1
    4
    1
    5
    1
    6will raise a TypeError: object of type ‘…’ has no len[].

    Python3

    Ví dụ 2:

    class foo[object]:
        def __init__[self, obs=None]:
            if obs is None:  # provide a default if no list was passed in.
                obs = []
            self.data = obs
            self.max = max[obs]
            self.min = min[obs]
            self._data_len = len[obs]
    
        def __len__[self]:
            return self._data_len
    
    1__len__[]1

    Khi đối tượng không có phương thức __len__ được xác định trước, sau đó trong khi thực thi hàm LEN, nó sẽ tạo ra một kiểu mẫu, nhưng nó có thể được sửa bằng cách xác định phương thức __len__ bằng chính chúng ta,

    1
    7
    13
    9
    13
    8
    TypeError                                 Traceback [most recent call last]
     in 
         3 
         4 obj = Length[]
    ----> 5 print[len[obj]]
    TypeError: object of type 'Length' has no len[]
    0

    Output:

    TypeError                                 Traceback [most recent call last]
     in 
         3 
         4 obj = Length[]
    ----> 5 print[len[obj]]
    TypeError: object of type 'Length' has no len[]

    __ chức năng __ __ trong Python là gì?

    Python __len __ [] Phương thức ma thuật cuối cùng nó trả về một giá trị số nguyên lớn hơn hoặc bằng 0 vì nó đại diện cho độ dài của đối tượng mà nó được gọi là.returns an integer value that is greater than or equal to zero as it represents the length of the object for which it is called.

    __ str __ là gì [bản thân?

    __str__ là một phương pháp đặc biệt, như __init__, được cho là sẽ trả về một đại diện chuỗi của một đối tượng.Ví dụ, đây là phương pháp STR cho các đối tượng thời gian: # Bên trong lớp Thời gian: def __str __ [self]: return '%.2d:%. 2d:%. 2d'%[self.hour, self.minute, self.second]a special method, like __init__ , that is supposed to return a string representation of an object. For example, here is a str method for Time objects: # inside class Time: def __str__[self]: return '%.2d:%.2d:%.2d' % [self.hour, self.minute, self.second]

    Lớp Len [] I Python là gì?

    Hàm Len [] sẽ cố gắng gọi một phương thức có tên __len __ [] trên lớp của bạn.Đây là một trong những phương pháp đặc biệt được gọi là Phương pháp Dunder [đối với Double Undercore] mà Python sẽ tìm kiếm để thực hiện các hoạt động đặc biệt.Việc thực hiện phương thức đó sẽ cho phép gọi Len [] để làm việc trên lớp.__len__[] on your class. This is one of the special methods known as a “dunder method” [for double underscore] which Python will look for to perform special operations. Implementing that method will allow the len[] call to work on the class.

    Danh sách LEN trong Python là gì?

    Phương thức danh sách Python Len [] Trả về số lượng các phần tử trong danh sách.returns the number of elements in the list.

    Bài Viết Liên Quan

    Chủ Đề