1.__init__():
__init__(self)
中,默认有1个参数名字为self,如果在创建对象时传递了2个实参,那么__init__(self)
中出了self作为第一个形参外还需要2个形参,例如__init__(self,name,age)
# 定义一个狗类 class Dog(object): def __init__(self, name, age): self.name = name self.age = age # 定义一个对象wc名字叫"旺财",年龄为19 wc = Dog("旺财", 19) print(wc.name) print(wc.age)
输出结果:
旺财
19
2.__str__():
# 定义一个狗类 class Dog(object): def __init__(self, name, age): self.name = name self.age = age def __str__(self): return "狗的名字叫%s,年龄为:%d" % (self.name, self.age) # 定义一个对象wc名字叫"旺财",年龄为19 wc = Dog("旺财", 19) print(wc)
- 当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了
__str__(self)
方法,那么就会打印从在这个方法中return
的数据 __str__
方法通常返回一个字符串,作为这个对象的描述信息
3.__del__():
创建对象后,python解释器默认调用__init__()
方法;
当删除对象时,python解释器也会默认调用一个方法,这个方法为__del__()
方法
-
当有变量保存了一个对象的引用时,此对象的引用计数就会加1;
-
当使用del() 删除变量指向的对象时,则会减少对象的引用计数。如果对象的引用计数不为1,那么会让这个对象的引用计数减1,当对象的引用计数为0的时候,则对象才会被真正删除(内存被回收)。
-
当程序运行结束时,也会自动调用__del__()方法,因为python解释器每当程序结束会自动删除对象。
4.__new__():
class A(object):
def __init__(self):
print("这是 init 方法")
def __new__(cls):
print("这是 new 方法")
return object.__new__(cls)
A()
- 创建对象时自动调用父类object类中的__new__()方法进行实例化对象,在__init__()方法之前调用。
- 一般创建单例对象时会在object子类中用到
-
__new__
至少要有一个参数CLS,代表要实例化的类,此参数在实例化时由Python的解释器自动提供 -
__new__
必须要有返回值,返回实例化出来的实例,点这在自己实现__new__
时要特别注意,可以返回父类__new__
出来的实例,或者直接是对象的__new__
出来的实例 -
__init__
有一个参数的自我,这个就是__new__
报道查看的实例,__init__
在__new__
的基础上可以完成一些其它初始化的动作,__init__
不需要返回值 -
我们可以将类比作制造商,
__new__
方法就是前期的原材料购买环节,__init__
方法就是在有原材料的基础上,加工,初始化商品环节