Python_020(几个经典内置方法)

Posted 0627zhou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python_020(几个经典内置方法)相关的知识,希望对你有一定的参考价值。

一.内置方法

1.内置方法表示:__名字__

  几种名称: 1)双下方法 2)魔术方法 3)类中的特殊方法/内置方法

  类中的每一个双下方法都有它自己的特殊意义;所有的双下方法没有 需要你在外部直接调用的

  父类Object都带有这些方法,而总是有一些其他的 内置函数 特殊语法来触发双下方法

2.__call__()方法:

class A:
    def __call__(self, *args, **kwargs):
        print(对象()自动触发我!)
a = A()
a()         #这两个步骤还可以写为A()()

1)__call__的一些用法,如果你有两个类,你只想显给别人B类,而不暴露A类,可能在实例化A类之前做一些事情

这时候就需要引入另一个类,让它执行__call__方法

 

class A:
    def __call__(self, *args, **kwargs):
        print(执行call方法了)
class B:
    def __init__(self,cls):
        print(在实例化A之前做一些事情)
        self.a = cls()                    #实例化A的对象        
        self.a()                        #调用A类中的call方法
        print(在实例化A之后做一些事情)
B(A)  #只暴露B,不暴露A

 

2)__len__方法:

a:遇到len(obj)会自动触发obj的__len__方法 

 

 

class A:
    def __init__(self,obj):
        self.obj = obj
    def __len__(self):
        return len(self.obj)
a = A(wwwwww)
print(len(a))
#结果为6

 

3)__str__方法:

a:会自动触发该方法的几种情况

   1)print一个对象相当于调用一个对象的__str__方法

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

   3)‘%s‘ % obj相当于执行了obj.__str__方法

b:如果类中没有__str__方法,会自动执行父类的Object的__str__方法,但是只会返回给你一个内存地址,因为它不知道你想要得到什么属性;

class A:
    pass
a = A()
print(a)
#输出结果:
<__main__.A object at 0x0000024F722690F0>



#类中含有__str__方法:
class A:
    def __str__(self):
        return (%s, %s, %s)% (self.name,self.age,self.cls)
    def __init__(self,name):
        self.name = name
        self.age = 15
        self.cls = python
a = A(zhou)
print(a)
b = A(liu)
print(b)
#输出结果
zhou, 15, python
liu, 15, python

c:有什么用处,特别好用能不用你调用就自动输出一些你需要显示的内容;

4)__new__方法:

a:__new__和__init__的千丝万缕

__new__:开辟内存空间,属于对象的,把对象的空间作为返回值传给self,执行init方法;  类的构造方法

__init__:给对象封装属性;   类的初始化方法

看他们的执行顺序:

 

class A:
    def __new__(cls, *args, **kwargs):
        print(执行了__new__方法)
        return object.__new__(cls)
    def __init__(self):
        print(执行了__init__方法)
a = A()
#执行结果
执行了__new__方法
执行了__init__方法

 

#所以__new__是在对象实例化之前调用的,还没有开辟空间传给self,所以这里会把cls类的空间传进来;

new的金典题目单例类:

单例类:在实例化对象后,每个对象的开辟的空间一样,就是单例类;

 

class A:
    _NAME = None
    def __new__(cls, *args, **kwargs):
        if not cls._NAME:
            cls._NAME = object.__new__(cls)
        return cls._NAME
    def __init__(self):
        pass
a = A()
print(a)
b = A()
print(b)
#输出结果
<__main__.A object at 0x00000221704E9240>
<__main__.A object at 0x00000221704E9240>

 

以上是关于Python_020(几个经典内置方法)的主要内容,如果未能解决你的问题,请参考以下文章

020集合类型内置方法

几个关于js数组方法reduce的经典片段

13 个非常有用的 Python 代码片段

python学习8_1 面向对象(继承多态封装)以及零散概念(组合,property,绑定方法与非绑定方法,反射,内置函数)

Lesson 020 —— python 条件控制

python散记