Object类详解

Object类似所有类的父类,所有对象(包括数组)都实现了这个类的方法

Object类中的方法如下:

getClassclonenotifynotifyAllwait是本地方法

hashCode方法也是本地方法:hashCode方法的结果必须和equals方法的结果一致。在Object类中equals方法与“==”的功能一样,都是比较对象的在堆中的地址。但是在某些子类中如String类中,equals方法是被重写过的,用来比较对象的内容,根据hashCode方法的要求,我们必须在String类中对hashcode方法进行重写。但是hashcode相等的对象,equals却不一定相等。

Equals方法在object类中与“==”是一样的。

toString方法默认返回一个字符串,这个字符串由类名加“@”加对象的hashCode组成。比如:Test@12343

Finalize方法在Object类中比没有内容,这个方法在java决定进行垃圾回收之前会自动调用并且一个对象的Finalize方法只能被调用一次。

下面用一个例子来分析Finalize方法:

public class Test{
	static B b;
	public static void main(String[] args) throws Exception{
		Test.b=new B();
		System.out.println("第一次打印"+Test.b.toString());//
		Test.b=null;
		System.gc();//执行内存清理,但是在调用finalize方法的时候,对象拯救了自己,因此不会进行堆内存的回收
		Thread.sleep(5000);//这里必须要进行休眠,因为finalize方法优先级很低,不休眠的话,finalize方法可能不会被执行
		System.out.println("第二次打印"+Test.b.toString());
		Test.b=null;
		System.gc();//执行到这里的时候finalize方法不会被执行,因为一个对象的finalize方法只能被执行一次,因此Test.b依然为null
		Thread.sleep(5000);
		System.out.println("第三次打印"+Test.b.toString());//出现空指针异常
	}	
}
class  B{
	@Override
	protected void finalize() throws Throwable {
		super.finalize();
		Test.b=this;
		System.out.println("finalize");		
	}
}



<think>好的,我现在需要详细解释Python中的object。首先,我得回忆一下自己对object的理解。object是所有的基,在Python 3中,如果一个没有显式继承其他,它会默认继承object。这可能涉及到新式和旧式的区别,但Python 3已经统一使用新式,所以旧式的问题可能不用多提。 接下来,我需要确认object提供了哪些默认的方法和属性。比如__init__、__str__、__repr__这些魔术方法是否是object的一部分。可能还要提到__dict__属性,它存储对象的属性字典。另外,像__class__属性指向对象,这些可能都是继承自object的。 然后,object方法需要具体说明,比如__new__和__init__的作用,__del__作为析构函数。还有比较方法如__eq__、__hash__,以及__getattribute__这样的属性访问方法。可能需要举例子说明覆盖这些方法的影响。 另外,多重继承中object的位置,比如在钻石继承问题中,object作为顶级父如何影响方法解析顺序(MRO)。这部分可能需要用super()函数来说明新式的MRO处理方式。 还要提到使用dir(object)可以查看object的所有属性和方法,帮助用户探索。同时,实例化object本身的情况,比如obj = object(),但这样的实例无法添加属性,因为object没有__dict__,或者可能需要__slots__的解释。 可能需要注意用户在使用object时的一些常见误区,比如重写特殊方法时的注意事项,或者为什么自定义异常最好继承Exception而不是object。这部分需要准确,避免误导。 需要验证一些不确定的点,比如在Python 3中,所有是否确实隐式继承object。是的,Python 3中没有旧式,所以不需要显式继承。但为了代码的兼容性,可能还是建议显式写出。 最后,结构要清晰,分点讲解,可能分为概述、默认方法、重要属性、继承机制、使用示例、注意事项等部分。确保语言简洁,用例子辅助说明,比如展示如何覆盖__str__方法,或者比较两个对象的默认行为。 需要检查是否有错误,例如是否所有都继承objectobject方法是否默认存在,以及实例化object后的限制是否正确。可能还要提到__slots__和内存优化相关的内容,但可能属于高级话题,简要提及即可。 总结下来,回答需要涵盖object的基础作用、提供的方法和属性、继承机制、使用示例以及注意事项,确保内容准确且易于理解。</think>Python中的`object`是所有的基,在面向对象编程中具有核心地位。以下是对`object`的详细解析: --- ### 一、基础概念 1. **顶级父** - 在Python 3中,所有默认隐式继承自`object`,即使不显式声明。 - 示例: ```python class MyClass: # 等价于 class MyClass(object): pass ``` 2. **新式的统一** - Python 3移除了“旧式”(Python 2中需显式继承`object`才能用新特性),所有均为新式。 --- ### 二、object提供的核心方法 `object`定义了所有的默认行为,以下为关键方法: #### 1. 生命周期方法 - `__init__(self, ...)`:构造方法(默认空实现)。 - `__new__(cls, ...)`:创建实例的静态方法(返回实例对象)。 - `__del__(self)`:析构方法(慎用,因垃圾回收机制不确定)。 #### 2. 对象表示 - `__str__(self)`:返回可读字符串(`print(obj)`时调用)。 - `__repr__(self)`:返回明确的对象描述(调试用,默认实现为名+内存地址)。 #### 3. 比较与哈希 - `__eq__(self, other)`:定义`==`行为(默认比较内存地址)。 - `__hash__(self)`:返回哈希值(若重写`__eq__`,通常需同步重写)。 #### 4. 属性访问 - `__getattribute__(self, name)`:属性访问拦截器。 - `__setattr__(self, name, value)`:设置属性时触发。 --- ### 三、重要属性 1. `__dict__` - 存储对象属性的字典(除非定义了`__slots__`)。 - 示例:`obj.__dict__['name'] = 'Alice'` 等效于 `obj.name = 'Alice'`。 2. `__class__` - 指向对象所属的(如`obj.__class__`返回`MyClass`)。 3. `__doc__` - 的文档字符串(可通过`help(obj)`查看)。 --- ### 四、继承与MRO(方法解析顺序) 1. **多继承中的角色** - `object`位于继承树的顶端,影响方法查找顺序。 - 示例: ```python class A(object): pass class B(A): pass print(B.__mro__) # 输出:(<class 'B'>, <class 'A'>, <class 'object'>) ``` 2. **super()与MRO** - 新式通过C3算法确定方法调用顺序,避免多继承的“菱形问题”。 --- ### 五、使用示例 #### 1. 重写`__str__` ```python class Person: def __init__(self, name): self.name = name def __str__(self): return f"Person: {self.name}" p = Person("Alice") print(p) # 输出:Person: Alice ``` #### 2. 禁止动态添加属性 ```python class Locked(object): __slots__ = ('name',) # 限制只能有name属性 obj = Locked() obj.name = "Alice" obj.age = 20 # 报错:AttributeError ``` --- ### 六、注意事项 1. **避免直接实例化`object`** - `obj = object()`创建的对象无法添加属性(因无`__dict__`)。 2. **特殊方法覆盖需谨慎** - 例如,重写`__eq__`时需保证逻辑一致性,否则可能破坏依赖哈希的容器(如字典、集合)。 3. **继承选择** - 自定义异常应继承`Exception`而非`object`,以兼容异常处理机制。 --- ### 七、探索object 通过`dir(object)`查看所有默认属性和方法: ```python print(dir(object)) # 输出:['__class__', '__delattr__', '__dir__', '__doc__', ...] ``` --- ### 总结 `object`是Python面向对象编程的基石,理解其默认行为和扩展机制是掌握设计的关键。通过重写其方法或利用继承机制,开发者可以灵活定制的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值