美文网首页
【第28天】python全栈从入门到放弃

【第28天】python全栈从入门到放弃

作者: 36140820cbfd | 来源:发表于2019-08-19 20:58 被阅读0次

1.initnew方法区别

init初始化方法

new构造方法(先构造出来,才能初始化)

2.实例化一个方法都发生了什么?

1开辟一个属于对象的空间,new方法

2把对象的空间传给self,同时调用init方法

3将这个对象的空间返回给调用者

3 new构造方法

new构造方法在什么时候执行:在实例化对象之后,在init初始化之前。

代码块
class Single:

    def __new__(cls, *args, **kwargs):

        obj=object.__new__(cls)

        print('在new方法里面',obj)

        return  obj

    def __init__(self):

        print('在init方法里面',self)

a=Single()

输出结果:

在new方法里面 <__main__.Single object at 0x009E8E90>

在init方法里面 <__main__.Single object at 0x009E8E90>

4单例类

定义:
如果一个类 从头到尾只能有一个实例,说明从头到尾之开辟了一块儿属于对象的空间,那么这个类就是一个单例类

代码块:不是单例类的例子
class Student:
    print('hello')

a=Student()
b=Student()
c=Student()
print(a,b,c)
#因为a,b,c三个的空间地址不一样,所以不是单例类,
# 单例类是一个类只能由一个实例化的对象

通过__ISINSTANCE=None来控制只能创造一个构造空间,无论实例化多少对象,后面都会把前面的覆盖,永远只有一开始创建的那个内存空间,这就是单例类的实现。

代码块:单例类的例子
class A:

    __ISINCTANCE = None

    def __new__(cls, *args, **kwargs):

        if not cls.__ISINCTANCE:

            cls.__ISINCTANCE = object.__new__(cls)

        return cls.__ISINCTANCE

    def __init__(self,name):

        self.name = name

        print(self)


a=A('wangsiyu')    #<__main__.A object at 0x014E8ED0>

b=A('mayun')        #<__main__.A object at 0x014E8ED0>

print(b.name)        #mayun

print(a.name)        #mayun

print(a,b)          #  <__main__.A object at 0x014E8ED0> <__main__.A object at 0x014E8ED0>

如果换成__ISINSTANCE=True,判断条件再把not去掉,就没有用了。

就无法用__ISINSTANCE=None来限制创造构造空间的数量了

代码块
class A:

    __ISINCTANCE = True

    def __new__(cls, *args, **kwargs):

        if  cls.__ISINCTANCE:

            cls.__ISINCTANCE = object.__new__(cls)

        return cls.__ISINCTANCE

    def __init__(self,name):

        self.name = name

        print(self)


a=A('wangsiyu')    #<__main__.A object at 0x014E8ED0>

b=A('mayun')        #<__main__.A object at 0x014E8ED0>

print(b.name)        #mayun

print(a.name==b.name)        #False


5__str__方法

代码块
class Student:

    def __str__(self):
        return '%s %s %s'%(self.school,self.cls,self.name)

    def __init__(self,name,stu_cls):

        self.school = 'oldboy'

        self.name = name

        self.cls = stu_cls

a=Student('wangsiyu','ec14')

print(a)  #oldboy ec14 wangsiyu

print一个对象相当于调用一个对象的str方法

str(obj),相当于执行obj.str方法

'%s'%obj,相当于执行obj.str方法

别跑,点个赞再走

相关文章

网友评论

      本文标题:【第28天】python全栈从入门到放弃

      本文链接:https://www.haomeiwen.com/subject/lfaesctx.html