python面向对象的一些常用魔术方法

一.常见魔术方法

name 类,函数,方法等的名字
module 类定义所在的模块
class 对象或类所属的类
bases 当前类的基类(父类)
doc 类,函数的文档帮助,没有定义为None
mro Method Resolution Order 方法解析顺序
dict 类或实例的属性,可写的字典

举例:

class A(object):
    pass
class C(object):
    pass
class Date(A, C):
    Country = 'china'

    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day

print(Date.__name__)

# 类定义所在的模块, 如果在当前脚本, 返回__main__, 否则, 返回真实的模块名eg: collections
print(Date.__module__)

# 对象或类所属的类: 是由哪个类实例化出来的;
d = Date(2019, 10, 10)
print(d.__class__)  # d对象是由Date类实例化出来的;
print(Date.__class__)  # type(1)Date类是由type类实例化出来的
# 当前类的基类(父类)
print(Date.__bases__)
print(A.__bases__)
print(object.__bases__)  # object没有父类;

查看结果:
python面向对象的一些常用魔术方法_第1张图片
二.创建,初始化,销毁
创建__new__:new的功能是在生成对象之前所作的动作,接收的参数是cls类,负责对象的创建
初始化__init__:init是在对象生成完成之后完善对象的属性,接收的是self对象,负责对象的初始化
销毁(删除):del:del删除一个对象,python中不管是手动调用还是自动回收都会调用该方法

class Student(object):
    def __new__(cls, name):
        print('正在new.....')
        # 不知道new方法试药干吗的, 直接返回父类的new方法
        return  super(Student, cls).__new__(cls)

    # 初始化(构造)方法: 创建对象时自动执行
    def __init__(self, name):
        print("正在初始化对象.....")
        self.name = name

    # 析构方法: 对象删除时自动调用
    def __del__(self):
        print("正在删除对象.....")

# 当程序运行结束之后, 会自动释放变量信息. 会自动调用析构方法;
s = Student('westos')
print(s.name)
#此处手动调用
del s
#print(s.name)

查看结果:可以看到new方法先执行,最后手动调用del方法,即删除实例对象s
在这里插入图片描述
三.str__与__repr
str__与__repr 是在类(对象)中对类(对象)本身进行字符串处理。
通过例子了解其用法:

class Student(object):
    # 初始化(构造)方法: 创建对象时自动执行
    def __init__(self, name):
        print("正在初始化对象.....")
        self.name = name
s = Student("westos")
print(s)

当没有该方法时,显示对象的地址:
在这里插入图片描述

class Student(object):
    # 初始化(构造)方法: 创建对象时自动执行
    def __init__(self, name):
        print("正在初始化对象.....")
        self.name = name
    # 如果没有__str__, 自动返回__repr__的内容
    # 对象的字符串打印
    def __str__(self):
        return  "" %(self.name)
    # 在交互式python环境中产生作用
    def __repr__(self):
        return  self.name
s = Student("westos")
print(s)

使用str与repr时,可以友好显示字符串:
在这里插入图片描述
四.类型转换的魔术方法

__int__ 转换成整型
__long__ 转换成长整型
__float__ 转换成浮点型
__complex__ 转换成复数
__oct__ 转换成八进制
__hex__ 转换成十六进制
__index__ 如果定义了一个可能被用老做切片的数值型
__trunc__ 当math.truc(self)使用时被调用__trunc__f返回自身类型的整形截取
__coerce__ 执行混合类型的运算

你可能感兴趣的:(python,westos)