zoukankan      html  css  js  c++  java
  • Python 学习小结

    假期闲来无事,捡起Python再看一遍,略有收获,记载如下。

    首先,Python中有function和method的区别,从types.MethodType和types.FunctionType就可以看出,其区别在于method是Class中的函数,但只能叫方法;此外的函数都是function。

    其次,Python是动态语言,也就是鸭子类型:只要看起来像鸭子,举止行为像鸭子,那就认为这是鸭子。这就是Python的多态,与Java明显不同。

    Python也有Class和instance的区别:前者是抽象,后者是实例。

    与Java不同的是,Python支持动态的添加属性(值或者方法/函数,值没有好说的,这里我们只讨论函数/方法):可以给instance添加属性(仅用于当前对象),也可以给Class添加属性(可用于所有对象)!

    以Class Student为例:

    class Student(object):
        pass

    给Student类本身添加方法很简单,只需要定义一个方法,然后将其赋予Student的属性即可!唯一需要记住的是,方法的第一个参数必须是self。如下:

    def set_age(self, age):
        self.age = age
    
    
    Student.set_age = set_age  # 这样即可!
    
    stu = Student()
    stu.set_age(18)
    
    print(stu.age) # 这里会得到18

    而给Student的instance添加属性方法则比较麻烦,需要将定义的函数转成MethodType,再赋予Student的instance的属性。同样的,方法的第一个参数必须是self。如下:

    import types
    
    
    def set_name(self, name):
        self.name = name
    
    
    stu = Student()
    # stu.set_name = set_name # DONT
    stu.set_name = types.MethodType(set_name, stu) # 必须这样
    
    
    stu.set_name('LarryZeal')
    print(stu.name)

    至于必须转成MethodType的原因,可以通过执行上面被注释掉的代码来说明:

    import types
    
    
    def set_name(self, name):
        self.name = name
    
    
    stu = Student()
    stu.set_name = set_name # DONT
    
    
    stu.set_name('LarryZeal') # ERROR! 不知道self是什么
    print(stu.name)

    就是说,直接调用的是function,而非method。个人认为,二者的区别在于self:Class会主动将对象绑定到self,其他的不会!

    按照这个推测,其实可以输出下上面两种情况的属性的type:

    print(type(stu.set_name))

    一种是method,一种是function!

  • 相关阅读:
    判断两个数组是否相等
    IIS应用程序池性能分析
    配置Windows Update,补丁更新
    正则表达式从右往左进行匹配(Regex)
    OpenSSL
    openssl用法详解
    OpenSSL生成公钥私钥***
    HTTP认证与https简介
    单机至亿级流量大型网站系统架构的演进过程
    程序员常用英语词汇
  • 原文地址:https://www.cnblogs.com/larryzeal/p/6361600.html
Copyright © 2011-2022 走看看