对象族谱之类对象实例化过程

'''对象族谱之类对象实例化过程'''

class Person(object):

    '''获取对象方法'''
    def __new__(cls, *args, **kwargs):

        '''
            对象获取要点之一: 获取
                当外部进行类名方法调用时,会调用__new__方法获取对象实例
                但只是获取,并不一定是创建,也可以返回已经存在的一个对象
                返回的对象也不一定是当前类的实例对象,可以是任何在python中可以称作是对象的东西
        '''
#       return 3    可以返回一个int对象,也可以是任何其他对象

        '''
            对象获取要点之二: 创建
                python中创建类实例对象的方法只有一种,object.__new__(cls),cls表示创建的对象依附的类名称
                当子类当中省略该方法时,会自动追寻到父类,调用父类的__new__方法进行创建,层级追溯,直到追溯到type中调用的object.__new__方法
                由此可见,所有的类实例对象都是同样的原型体,唯一的区别在于以下三点:
                    1.类名
                        绑定类名,类之间类名不同
                    2.属性
                        类初始化__init__中定义的属性不同,不同类属性存在差异
                    3.方法
                        类中定义的方法不同,行为不一致
                所以可以说:
                    对象都是相同的原型,通过类赋予了归属名称,属性和方法才产生了区分
                    (对象名称是程序员规定,不在族谱谈论范围)
        '''
        return object.__new__(cls)

    '''对象初始化方法'''
    def __init__(self):
        '''
            对象初始化要点之一: 初始化对象
                进行初始化操作,针对的是当前类的实例对象,确切的说是__new__返回的对象
                直接调用self指定当前对象实例,通过点(.)指定属性,直接进行赋值初始化


            对象初始化要点之二: 赋予属性
                为__new__方法返回的实例对象添加属性,有以下三种差异:
                    1.非当前类对象,但是拥有指定的同名属性
                        通过self.attr进行赋值,能够成功,属性值会被赋予的新属性值覆盖,此对象不属于该类
                    2.非当前类对象,不拥有指定的属性名称
                        执行失败
                    3.当前类对象初始化
                        如果__new__的返回值确定是当前类的对象,必然是object.__new__(cls)生成的原型体
                        直接self.attr进行赋值操作,相当于为原型体添加指定的属性
                        原型体的属性添加完毕之后,可以被赋予不同的值,但是属性一直存在,除非调用del进行删除

        '''
        self.name = 'judas'
    '''对象方法调用执行方法'''
    def __call__(self, *args, **kwargs):
        '''
            类实例对象进行方法调用时执行此方法
            但是一般分作两种场合:
                1.一般类定义
                    一般类当中,该方法属于DIY自定义方法,除非工作当中有明确的规则定义,否则一般都可以随便定义
                    自定义操作范围:
                        参数的个数也可以自己定义,操作随意
                        可以带返回值,也可以不带返回值
                        任意操作,一般方法允许的操作都适用
                2.元类定义
                    元类是类的类,元类的实例对象是一个类,当类名进行方法调用时必须返回一个对象
                    至于是创建新的对象还是移植一个已经存在的对象不做细节要求,同一般类定义中的__new__方法
                    不过这不是一个良好的编程习惯,不推荐瞎鸡巴玩
            
            此方法一般不做要求,可以看做是调用方式比较特殊的对象行为方法定义
            但是在元类定义中,需要谨慎对待,符合规格

        '''
        print('__call__')

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值