object

在 Python 中,object 类是所有类的基类。它定义了一些内置方法,这些方法在所有对象中都可用。以下是一些常见的 object 类的内置方法及其作用:

  1. __init__(self, ...)

    • 作用: 构造函数,用于初始化对象。当创建对象时,这个方法会被自动调用。
    • 示例:
      1
      2
      3
      4
      5
      class MyClass:
      def __init__(self, value):
      self.value = value

      obj = MyClass(10)
  2. __del__(self)

    • 作用: 析构函数,当对象被销毁时,这个方法会被调用。注意,Python 的垃圾回收机制会自动处理对象的销毁,所以这个方法通常不需要手动调用。
    • 示例:
      1
      2
      3
      4
      5
      6
      class MyClass:
      def __del__(self):
      print("Object is being destroyed")

      obj = MyClass()
      del obj # 或者 obj = None
  3. __str__(self)

    • 作用: 返回对象的字符串表示,当使用 print() 函数或 str() 函数时,会调用这个方法。
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      class MyClass:
      def __str__(self):
      return f"MyClass object with value: {self.value}"

      obj = MyClass()
      obj.value = 10
      print(obj) # 输出: MyClass object with value: 10
  4. __repr__(self)

    • 作用: 返回对象的“官方”字符串表示,通常用于调试。如果 __repr__ 没有被定义,Python 会调用 __str__
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      class MyClass:
      def __repr__(self):
      return f"MyClass(value={self.value})"

      obj = MyClass()
      obj.value = 10
      print(repr(obj)) # 输出: MyClass(value=10)
  5. __eq__(self, other)

    • 作用: 比较两个对象是否相等,当使用 == 运算符时,会调用这个方法。
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      class MyClass:
      def __eq__(self, other):
      if isinstance(other, MyClass):
      return self.value == other.value
      return False

      obj1 = MyClass()
      obj1.value = 10
      obj2 = MyClass()
      obj2.value = 10

      print(obj1 == obj2) # 输出: True
  6. __ne__(self, other)

    • 作用: 比较两个对象是否不相等,当使用 != 运算符时,会调用这个方法。
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      class MyClass:
      def __ne__(self, other):
      return not self.__eq__(other)

      obj1 = MyClass()
      obj1.value = 10
      obj2 = MyClass()
      obj2.value = 20

      print(obj1 != obj2) # 输出: True
  7. __lt__(self, other)

    • 作用: 比较两个对象是否小于,当使用 < 运算符时,会调用这个方法。
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      class MyClass:
      def __lt__(self, other):
      if isinstance(other, MyClass):
      return self.value < other.value
      return NotImplemented

      obj1 = MyClass()
      obj1.value = 10
      obj2 = MyClass()
      obj2.value = 20

      print(obj1 < obj2) # 输出: True
  8. __le__(self, other)

    • 作用: 比较两个对象是否小于或等于,当使用 <= 运算符时,会调用这个方法。
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      class MyClass:
      def __le__(self, other):
      if isinstance(other, MyClass):
      return self.value <= other.value
      return NotImplemented

      obj1 = MyClass()
      obj1.value = 10
      obj2 = MyClass()
      obj2.value = 10

      print(obj1 <= obj2) # 输出: True
  9. __gt__(self, other)

    • 作用: 比较两个对象是否大于,当使用 > 运算符时,会调用这个方法。
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      class MyClass:
      def __gt__(self, other):
      if isinstance(other, MyClass):
      return self.value > other.value
      return NotImplemented

      obj1 = MyClass()
      obj1.value = 20
      obj2 = MyClass()
      obj2.value = 10

      print(obj1 > obj2) # 输出: True
  10. __ge__(self, other)

    • 作用: 比较两个对象是否大于或等于,当使用 >= 运算符时,会调用这个方法。
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      class MyClass:
      def __ge__(self, other):
      if isinstance(other, MyClass):
      return self.value >= other.value
      return NotImplemented

      obj1 = MyClass()
      obj1.value = 20
      obj2 = MyClass()
      obj2.value = 20

      print(obj1 >= obj2) # 输出: True
  1. __hash__(self)

    • 作用: 返回对象的哈希值,当对象需要被用作字典的键或集合的元素时,会调用这个方法。
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      class MyClass:
      def __hash__(self):
      return hash(self.value)

      obj1 = MyClass()
      obj1.value = 10
      obj2 = MyClass()
      obj2.value = 10

      print(hash(obj1)) # 输出: 哈希值
      print(hash(obj2)) # 输出: 哈希值
  2. __bool__(self)

    • 作用: 返回对象的布尔值,当使用 bool() 函数时,会调用这个方法。如果没有定义 __bool__,Python 会尝试调用 __len__ 方法。
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      class MyClass:
      def __bool__(self):
      return self.value > 0

      obj1 = MyClass()
      obj1.value = 10
      obj2 = MyClass()
      obj2.value = 0

      print(bool(obj1)) # 输出: True
      print(bool(obj2)) # 输出: False
  3. __len__(self)

    • 作用: 返回对象的长度,当使用 len() 函数时,会调用这个方法。
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      class MyClass:
      def __len__(self):
      return len(self.values)

      obj = MyClass()
      obj.values = [1, 2, 3]
      print(len(obj)) # 输出: 3
  4. __getitem__(self, key)

    • 作用: 当使用索引操作符 [] 获取对象中的元素时,会调用这个方法。
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      class MyClass:
      def __getitem__(self, key):
      return self.values[key]

      obj = MyClass()
      obj.values = [1, 2, 3]
      print(obj[1]) # 输出: 2
  5. __setitem__(self, key, value)

    • 作用: 当使用索引操作符 [] 设置对象中的元素时,会调用这个方法。
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      8
      class MyClass:
      def __setitem__(self, key, value):
      self.values[key] = value

      obj = MyClass()
      obj.values = [1, 2, 3]
      obj[1] = 10
      print(obj.values) # 输出: [1, 10, 3]
  6. __delitem__(self, key)

    • 作用: 当使用索引操作符 [] 删除对象中的元素时,会调用这个方法。
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      8
      class MyClass:
      def __delitem__(self, key):
      del self.values[key]

      obj = MyClass()
      obj.values = [1, 2, 3]
      del obj[1]
      print(obj.values) # 输出: [1, 3]
  7. __iter__(self)

    • 作用: 返回一个迭代器对象,当使用 for 循环遍历对象时,会调用这个方法。
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      8
      class MyClass:
      def __iter__(self):
      return iter(self.values)

      obj = MyClass()
      obj.values = [1, 2, 3]
      for value in obj:
      print(value) # 输出: 1 2 3
  8. __next__(self)

    • 作用: 返回迭代器的下一个元素,当使用 next() 函数时,会调用这个方法。
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      class MyClass:
      def __init__(self, values):
      self.values = values
      self.index = 0

      def __iter__(self):
      return self

      def __next__(self):
      if self.index < len(self.values):
      result = self.values[self.index]
      self.index += 1
      return result
      else:
      raise StopIteration

      obj = MyClass([1, 2, 3])
      for value in obj:
      print(value) # 输出: 1 2 3

补充 function

在 Python 中,函数也是对象,它们是 function 类的实例。你可以使用一些内置函数和方法来获取函数的基本信息。以下是一些常用的方法:

  1. __name__

    • 作用: 返回函数的名称。
    • 示例:
      1
      2
      3
      4
      def my_function():
      pass

      print(my_function.__name__) # 输出: my_function
  2. __doc__

    • 作用: 返回函数的文档字符串(docstring),即函数的注释。
    • 示例:
      1
      2
      3
      4
      5
      def my_function():
      """This is a docstring."""
      pass

      print(my_function.__doc__) # 输出: This is a docstring.
  3. __annotations__

    • 作用: 返回函数参数和返回值的注解字典。
    • 示例:
      1
      2
      3
      4
      def my_function(param1: int, param2: str) -> bool:
      pass

      print(my_function.__annotations__) # 输出: {'param1': <class 'int'>, 'param2': <class 'str'>, 'return': <class 'bool'>}
  4. __code__

    • 作用: 返回一个 code 对象,包含了函数的编译代码。
    • 示例:
      1
      2
      3
      4
      def my_function():
      pass

      print(my_function.__code__) # 输出: <code object my_function at 0x...>
  5. __defaults__

    • 作用: 返回一个元组,包含了函数的默认参数值。
    • 示例:
      1
      2
      3
      4
      def my_function(param1, param2=10):
      pass

      print(my_function.__defaults__) # 输出: (10,)
  6. __code__.co_varnames

    • 作用: 返回一个列表,包含了函数的局部变量名。
    • 示例:
      1
      2
      3
      4
      5
      def my_function(param1, param2):
      local_var = 10
      pass

      print(my_function.__code__.co_varnames) # 输出: ('param1', 'param2', 'local_var')
  7. __code__.co_argcount

    • 作用: 返回函数的参数数量(不包括默认参数)。
    • 示例:
      1
      2
      3
      4
      def my_function(param1, param2):
      pass

      print(my_function.__code__.co_argcount) # 输出: 2
  8. inspect.signature()

    • 作用: 返回一个 Signature 对象,包含了函数的参数信息。
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      import inspect

      def my_function(param1, param2=10):
      pass

      sig = inspect.signature(my_function)
      print(sig) # 输出: (param1, param2=10)