Python常用内建方法:__init__,__new__,__class__

北城余情 提交于 2019-12-14 18:57:58

因为python中所有类默认继承object类。而object类提供了了很多原始的内建属性和方法,所以用户自定义的类在Python中也会继承这些内建属性。可以使用dir()函数可以查看,虽然python提供了很多内建属性但实际开发中常用的不多。而很多系统提供的内建属性实际开发中用户都需要重写后才会使用。对于python来说,属性或者函数都可以被理解成一个属性
class Person(object):
pass
#查看python中给对象提供的所有(内建)属性
print(dir(Person)) #使用dir()函数查看
‘’’
[‘lass’, ‘delattr’, ‘dict’, ‘dir’, ‘doc’,‘eq’, ‘format’, ‘ge’, ‘getattribute’,
gt’,‘hash’, ‘init’, ‘init_subclass’, ‘le’, ‘lt’,‘cmodule’, ‘ne’,
new’, ‘reduce’, ‘reduce_ex’,‘repr’, ‘setattr’, ‘sizeof’, ‘str’, ‘subclasshook’,‘weakref’]
‘’’
1.常用内建属性:init__和__new
1.__init__方法使用与功能:
1.用来构造初始化函数,用来给类的实例进行初始化属性,所以可以不需要返回值
2.在创建类的实例时系统自动调用
3.自定义类如果不定义的话,默认调用父类object的,同理继承也是,子类若无,调用父类,若有,调用自己的
class Student(object):
def init(self,name):
self.name = name
print(“这是__init__方法”)

s = Student(“tom”)
‘’’
这是__init__方法
‘’’

2.__new__方法使用与功能
1.__new__功能:用所给类创建一个对象,并且返回这个对象。
2.因为是给类创建实例,所以至少传一个参数cls,参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供
3.在类实例化时内部创建类实例的函数,并且返回这个实例,所以它是类实例时最先被调用的方法,一般不要人为定义该方法。
4.因为要创建实例返回实例,所以要有返回值。return父类__new__出来的实例,或者直接是object的__new__出来的实例

class Student(object):
def init(self,name):
self.name = name
print(“这是__init__方法”)

def __new__(cls, *args, **kwargs):
    print("这是__new__方法")
    return object.__new__(cls)

s = Student(“tom”)
‘’‘结果如下:注意__new__的执行顺序在__init__之前
这是__new__方法
这是_init__方法
‘’’

3.__init__和__new__使用的联系
1.__init__第一个参数是self,表示需要初始的实例,由python解释器自动传入,而这个实例就是这个__new__返回的实例
2.然后 __init__在__new__的基础上可以完成一些其它初始化的动作

class Student(object):
def init(self,name):
self.name = name
print(“这是__init__方法”)

def __new__(cls, *args, **kwargs):
    print("这是__new__方法")
    id =object.__new__(cls)
    print(id) #打印这个__new__创建并返回的实例在内存中的地址
    return id

s1 = Student(“JACK”)
print(s1)
‘’’
这是__new__方法
<main.Student object at 0x000001EC6C8C8748>
这是__init__方法
<main.Student object at 0x000001EC6C8C8748>
‘’’

总结:很明显,这两个实例的内存地址一样,所以__init__接受的实例就是__new__创建的。
关于__new__的实际开发使用可以参考:python使用__new__实现单例模式创建对象

2.常用内建属性:class
1.__class__功能与用法:
1.__class__功能和type()函数一样,都是查看对象所在的类。
2.__class__可以套用

class Student(object):
def init(self,name):
self.name = name
stu = Student(“tom”)
print(type(stu),type(Student))
print(stu.class, Student.class, stu.class.class)
‘’‘结果如下:
<class ‘main.Student’> <class ‘type’>
<class ‘main.Student’> <class ‘type’> <class ‘type’>
‘’’
python中的内建(内嵌)属性是系统自带的,用户不用导入包就可以直接使用的属性。如何查看python中所有的内建属性(内嵌) 呢? 很简单,内建属性既然到处都可以使用,肯定属于全局变量,使用globals()查看所有全局变量,可以看到有一个__builtins__的属性,使用__dict__即可查看。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!