`
yiminghe
  • 浏览: 1432476 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

比较javascript学python-1 对象与类

阅读更多

据说和javascript最像的是python,学习ing,理解动态语言精粹



0.python首先注意经典类与新类的区别,建议以后只用新类

经典类

class C:
    pass

 

新类

class C(object):
    pass
 


1.都内置基本类型 int string等,但有所不同

javascript 中

1.constructor 会生成临时对象

但是 python全是对象

1.__class__ 1本来就是对象,根据源码剖析解释,小整数还进行了缓存。



2.动态弱类型语言,接口没有意义,但是继承很有用

 

语言级别实现oop,可以进行多继承,注意经典的棱形基类函数查找顺序(广度优先)

class c(p1,p2):
    pass
 

javascript 由于使用原型链实现继承,只能实现链状单继承

//extjs extend mechanism
Ext.extend(c,p1);
 

3.相似的调用父类函数做法

python:

 

class p1(object):
    def pm(self):
        pass
class c(p1):
    def pm(self):
        //语言级别支持:super(p1,self).pm();
        p1.pm(self)
 



javascript:

function p1(){
}

p1.prototype.pm=function(){}

function c(){}
Ext.extend(c,p1,{
    pm:function(){
        //自己实现: c.superclass.pm.apply(this);
        p1.prototype.pm.apply(this);
    }
});
 



4.属性设置

都可以在实例上自由设置任意属性,但是读取区别

python

 

如果实例不存在属性,直接 obj.x会抛出异常,最好用hasattr判断,或者getattr指定默认参数



5.类型与对象模型(Object Model)

python

 

实线表示子类与父类关系,虚线表示类与实例的关系。


javascript

 

红线表示隐含[[prototype]]所指。

 

 

 

PS. JAVA 也类似,只不过 Class 作为元类(meta class)

 

Class z=Object.class ;

        Class b=z.getClass();

        Class v=b.getClass();

        Class v2=Class.class;

        System.out.println(z instanceof Class);

        System.out.println(v2 instanceof Class);

        System.out.println(v2 instanceof Object);

 

可认为 Class 的 class 属性是一开始设置好德,一个自循环数据结构:

 

Class.class=new Class("java.lang.class");

Object.class=new Class("java.lang.object");

// 所有class继承于 Object,包括 Class

// 所有 class 都是 Class 的实例

// java 不行
// Object instanceof Class

// 相当于
Object.class instanceof Class
 

 

 

 

6.类特殊函数:

python __str__ 对应 javascript toString ,并且python存在更细化的__repr__


python对属性有更多的控制,比如 property函数以及__get__,__set__,__getattribute__等强大的数据描述符可以控制对实例属性的读写(YUI3也构建了类似的Attribute.js)。

举个property以及修饰器的强大例子

def Property(f):  
    obj = f() 
    fdoc = f.__doc__
    return property(obj['fget'], obj['fset'], obj['fdel'], fdoc)


class HideX(object):
    
    def __init__(self, x):
        self.x = x
    
    @Property
    def x():        
        def fget(self):
            return ~self.__x
        def fset(self, x):
            assert isinstance(x, int), \
            '"x" must be an integer!'
            self.__x = ~x
        def fdel(self,x):
            pass    
        return locals()
if(__name__=='__main__'):   
    y=HideX(10);
    print y.x
    y.x='z'

 

  • 大小: 33.9 KB
0
1
分享到:
评论

相关推荐

    Python -数字累加的执行流程图

    Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...

    Python -函数的返回值-接收返回元组函数的方式

    Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...

    Python -递归实现数字累加

    Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...

    Python -递归演练代码的执行流程图

    Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...

    基于Python-Opencv的图片全景拼接.zip

    多语言支持:尽管OpenCV主要使用C++编写,但它提供了丰富的API绑定,支持包括C、Python、Java、MATLAB、JavaScript等多种编程语言,方便不同领域的开发者使用。 开源与免费:OpenCV遵循BSD开源许可证发布,用户...

    Python 元组-元组和格式化字符串

    Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...

    Python 高级变量-学习目标确定

    Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...

    Python 元组-特点以及和列表的区别

    Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...

    基于python-opencv的Tello无人机二维码扫描和数字识别.zip

    多语言支持:尽管OpenCV主要使用C++编写,但它提供了丰富的API绑定,支持包括C、Python、Java、MATLAB、JavaScript等多种编程语言,方便不同领域的开发者使用。 开源与免费:OpenCV遵循BSD开源许可证发布,用户...

    Python 模块-概念介绍

    Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...

    体感画板——基于外接摄像头追踪物件(Python-Opencv库).zip

    多语言支持:尽管OpenCV主要使用C++编写,但它提供了丰富的API绑定,支持包括C、Python、Java、MATLAB、JavaScript等多种编程语言,方便不同领域的开发者使用。 开源与免费:OpenCV遵循BSD开源许可证发布,用户...

    Python elif-女友的节日案例

    Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...

    python3.5全栈工程师零基础到项目实战全套

    15.Python3.5 CSS与JavaScript 24课 16.Python3.5 Web开发实战 26课 17.Python3.5 Js框架JQuery 23课 第三阶段:Python3.5 Django实战篇 18.Python3.5 DjangoWeb开发框架 18课 19.Python3.5 Django的ORM映射机制 20...

    python系统化学习初中高级视频教程

    [12] python数据分析与挖掘建模 [11] python网络爬虫 [10] python机器视觉和深度学三 [08] 头条推荐系统 [09] python人工智能 [07] 推荐系统基础 [06] 头条项目2 [05] flask框架 [04] 项目部署 [03] 商城后台 [02] ...

    Python 缺省参数-指定函数缺省参数的默认值

    Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...

    Python 模块-使用模块演练

    Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...

    Python 逻辑运算-案例1判断年龄

    Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...

    执行Python的方式-I Python

    Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...

    Python 2和Python 3的介绍

    Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...

    Python break和continue-continue代码演练

    Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...

Global site tag (gtag.js) - Google Analytics