文章目录
一、常用的方法
1. __init__方法
__init__方法是专门用来定义一个类具有哪些属性的方法。
当使用 类名() 创建对象时,会自动执行以下操作:
1.为对象在内存中分配空间 —— 创建对象
2.为对象的属性设置初始值 —— 初始化方法(init)
这个 初始化方法 就是 __init__()
方法,是对象的内置方法。其结构如下所示:
def __init__(self):
self.data = []
类定义了 __init__()
方法,类的实例化操作会自动调用 该方法。如下实例化类 MyClass,对应的 __init__()
方法就会被调用:
x = MyClass()
__init__()
方法可以有参数,参数通过 __init__()
传递到类的实例化操作上。如下实例所示:
class Complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
x = Complex(3.0, -4.5) # 这两个实参分别传到realpart和imagpart中去
print(x.r, x.i) # 输出结果:3.0 -4.5
应用场景: 开发中,如果希望在创建对象的同时就设置对象的属性。我们可以把希望设置的属性值,定义成__init__ ()
的参数,然后在方法内部使用 self.属性 = 形参
接收外部传递的参数。在创建对象时,使用 类名(属性1, 属性2...)
调用即可。
2. __new__方法
__new__()
是一种负责创建类实例的静态方法,它无需使用 staticmethod 装饰器修饰,且该方法会优先 __init__()
初始化方法被调用。
class demoClass:
instances_created = 0
def __new__(cls, *args, **kwargs):
print("__new__():", cls, args, kwargs)
instance = super().__new__(cls)
instance.number = cls.instances_created
cls.instances_created += 1
return instance
def __init__(self, attribute):
print("__init__():", self, attribute)
self.attribute = attribute
test1 = demoClass("abc")
test2 = demoClass("xyz")
print(test1.number, test1.instances_created)
print(test2.number, test2.instances_created)
该例参考@http://c.biancheng.net/view/5484.html,其运行结果为:
由该例可以看出系统优先执行__new__()
方法,然后再执行 __init__()
方法。
那我们什么时候才会使用到__new__()
呢,答案其实很简单,一般是在__init__()
不够用时。例如对 Python 不可变的内置类型(如 int、str、float 等)进行了子类化,这是因为一旦创建了这样不可变的对象实例,就无法在 __init__()
方法中对其进行修改。
class CapStr(str): # 该类继承str,但是str类型中不自带转变为大写的方法
def __new__(cls, string):
string = string.upper() # 想要对str类型转成大写
return str.__new__(cls, string)
a = CapStr('I love zhangyixing!')
print(a)
# I LOVE ZHANGYIXING!
3. __del__方法
在 Python 中,当使用 类名() 创建对象时,为对象分配完空间后,会自动 调用 __init__
方法。那么同样地,当一个对象从内存中被销毁前,会自动调用 __del__
方法。
class Cat:
def __init__(self, new_name):
self.name = new_name
print("%s 来了,此时调用的是__init__方法" %<