Python object
类教程
在 Python 中,object
是所有类的基类。所有 Python 类都隐式或显式地继承自 object
。理解 object
类是理解 Python 面向对象编程(OOP)的关键。它为所有类提供了一些基本的方法和属性,并定义了类的行为和实例的创建过程。
object
类的基本功能
- 创建类和实例
所有类都继承自 object
,可以通过定义类来创建新的类:
class MyClass:
pass
# 创建 MyClass 的实例
my_instance = MyClass()
print(type(my_instance)) # 输出: <class '__main__.MyClass'>
__init__
方法
__init__
方法是一个特殊的方法,用于在创建实例时初始化对象的属性:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# 创建 Person 的实例
person = Person("Alice", 30)
print(person.name) # 输出: Alice
print(person.age) # 输出: 30
__str__
和__repr__
方法
__str__
方法用于定义对象的字符串表示,主要用于用户可读性;__repr__
方法用于返回对象的官方字符串表示,主要用于开发和调试:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"Person(name={self.name}, age={self.age})"
def __repr__(self):
return f"Person({self.name!r}, {self.age})"
person = Person("Alice", 30)
print(person) # 输出: Person(name=Alice, age=30)
print(repr(person)) # 输出: Person('Alice', 30)
- 继承
通过继承,可以创建新的类,这些类可以继承基类的属性和方法:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
class Dog(Animal):
def speak(self):
return f"{self.name} says Woof!"
class Cat(Animal):
def speak(self):
return f"{self.name} says Meow!"
dog = Dog("Buddy")
cat = Cat("Whiskers")
print(dog.speak()) # 输出: Buddy says Woof!
print(cat.speak()) # 输出: Whiskers says Meow!
object
类的高级功能
__new__
方法
__new__
方法负责创建实例,在实例创建之前被调用。通常不需要重写这个方法,但在需要自定义实例创建过程时可以重写:
class MyClass:
def __new__(cls, *args, **kwargs):
instance = super().__new__(cls)
print("Creating instance", instance)
return instance
def __init__(self, name):
self.name = name
print("Initializing instance", self)
obj = MyClass("Example")
- 属性和描述符
描述符是一个对象属性,它通过描述符协议(__get__
, __set__
, __delete__
)控制其访问行为。描述符用于实现属性的自定义访问逻辑:
class Descriptor:
def __get__(self, instance, owner):
return instance._value
def __set__(self, instance, value):
instance._value = value
class MyClass:
attribute = Descriptor()
def __init__(self, value):
self.attribute = value
obj = MyClass(42)
print(obj.attribute) # 输出: 42
obj.attribute = 100
print(obj.attribute) # 输出: 100
- 元类
元类是创建类的类。通过定义元类,可以控制类的创建和行为:
class Meta(type):
def __new__(cls, name, bases, dct):
print(f"Creating class {name}")
return super().__new__(cls, name, bases, dct)
class MyClass(metaclass=Meta):
def __init__(self, value):
self.value = value
obj = MyClass(42)
object
类的方法
object
类提供了一些基本方法,这些方法可以被所有继承自 object
的类重写:
__init__(self)
用于对象的初始化,在对象创建后自动调用。
__str__(self)
返回对象的字符串表示,通常用于 print
函数。
__repr__(self)
返回对象的官方字符串表示,通常用于调试。
__eq__(self, other)
定义两个对象是否相等。
__hash__(self)
返回对象的哈希值,使对象可以用作字典的键或添加到集合中。
使用示例
以下是一个综合示例,展示了如何定义类、继承、使用描述符和重写 __str__
和 __repr__
方法:
class Descriptor:
def __get__(self, instance, owner):
return instance._value
def __set__(self, instance, value):
instance._value = value
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
def __str__(self):
return f"Animal(name={self.name})"
def __repr__(self):
return f"Animal({self.name!r})"
class Dog(Animal):
age = Descriptor()
def __init__(self, name, age):
super().__init__(name)
self.age = age
def speak(self):
return f"{self.name} says Woof!"
dog = Dog("Buddy", 5)
print(dog) # 输出: Animal(name=Buddy)
print(repr(dog)) # 输出: Animal('Buddy')
print(dog.speak()) # 输出: Buddy says Woof!
print(dog.age) # 输出: 5
dog.age = 7
print(dog.age) # 输出: 7
总结
object
类是所有 Python 类的基类,理解 object
类的功能和方法是掌握 Python 面向对象编程的基础。通过本文介绍的基本用法和高级功能,开发者可以轻松上手并熟练运用 Python 的 OOP 特性。更多详细信息和示例请参考官方文档。