`
yiminghe
  • 浏览: 1465427 次
  • 性别: 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-100-Days

    2. **面向对象编程**:深入理解类和对象的概念,包括类的定义、对象的创建与实例化、继承、封装、多态等。 3. **模块和包**:了解如何导入和使用Python标准库中的模块,以及如何创建和管理自定义的Python包。 4. *...

    python-3.7.7-docs-html.zip

    1. 位运算符的负指数:Python 3.7开始支持`-1`作为位运算符的指数,例如`x << -1`等价于`~x + 1`。 2. 赋值表达式(walrus operator):`:=`运算符在Python 3.8引入,但在3.7中可以预见其引入,用于简化某些情况下的...

    (知识引用自)廖雪峰-JavaScript-Python-Git-教程-by-it-ebooks-_z-lib.org_1

    1. **基本语法**:JavaScript语法与C/C++类似,但更宽松,支持动态类型。它允许在一行内编写多个语句,通过分号(;)进行分隔。 2. **数据类型和变量**:JavaScript有七种原始数据类型(null, undefined, boolean, ...

    Python-mjcript基于Cycript实现的一些实用函数

    Python中调用Cycript主要是为了利用其在iOS应用分析中的强大功能,如动态代码注入、类方法修改、对象操作等。这些功能在安全测试、漏洞挖掘以及应用调试过程中非常有用。 mjcript可能是作者创建的一个Python库,它...

    Python-BBS论坛源码

    此外,Python的Web开发往往与前端技术结合紧密,如HTML、CSS和JavaScript。前端部分可能使用了Bootstrap或其他前端框架来实现响应式设计,保证论坛在不同设备上的良好显示。Ajax技术可能被用来实现无刷新的用户体验...

    Python-基于Selenium爬虫的自动每天点绿github主页的python脚本

    3. 面向对象编程(OOP):可能使用类来封装Selenium的操作。 4. Web元素定位:通过CSS选择器或XPath找到需要点击的元素。 5. 自动化任务调度:使用APScheduler或其他类似库设置定时任务。 6. 错误处理:编写异常处理...

    Python-Parsley处理HTML为JSON

    5. **处理JSON**: 解析后的JSON数据可以方便地进行搜索、修改或与其他Python对象交互。你可以使用Python内置的`json`模块来处理和序列化这个数据。 6. **扩展与自定义**: 随着HTML结构的复杂性增加,可能需要添加更...

    python-2.7.3.msi

    2. 面向对象编程,支持类和对象,继承和多态。 3. 动态类型系统,允许在运行时改变变量类型。 4. 强大的标准库,涵盖网络、文件处理、系统接口等多个领域。 5. 可扩展性,可以使用C或C++编写性能关键的部分。 6. ...

    Python-CEFPython一个基于HTML5的PythonGUI框架

    4. 绑定JavaScript与Python:通过`BindObject()`方法将Python对象暴露给JavaScript,实现两者间的通信。 5. 运行和调试:运行应用,调试Python代码和HTML/JavaScript交互。 总的来说,CEF Python为Python开发者提供...

    Python-WebGLWind一个WebGL风力动态可视化

    而Python-WebGLWind则将Python与WebGL结合,实现了对三维数据的高效可视化,特别是针对大规模、复杂场景的可视化需求。 项目中的关键知识点包括: 1. **WebGL**:理解WebGL的工作原理,包括顶点、片段着色器、缓冲...

    廖雪峰 JavaScript Python Git 教程-01151355.pdf

    ### 廖雪峰 JavaScript Python Git 教程 #### JavaScript 教程概览 ##### JavaScript 简介 - **用途**: JavaScript 是一种轻量级的脚本语言,主要用于网页的交互控制。 - **特点**: 动态类型、弱类型、基于原型。 ...

    Python-iD3一个D3js的集成开发环境IDE

    4. **社区支持**:作为开源项目,Python-iD3有活跃的开发者社区,不断提供更新和新功能,确保与D3.js的最新版本保持同步。 **D3-ID3-master压缩包内容** "压缩包子文件的文件名称列表"中的"D3-ID3-master"很可能...

    廖雪峰:Git-Python-JS 教程

    廖雪峰老师所著的“Git-Python-JS 教程”为编程新手提供了一站式的学习资源,其中涵盖了当下最受欢迎的三种技术:版本控制工具Git、动态编程语言Python以及前端技术JavaScript。 首先,关于Git的部分,Git是一个...

    Python-大型FLaskCMS管理系统

    Python的SQLAlchemy库可以作为ORM(对象关系映射)工具,简化与数据库的交互,支持多种数据库后端。 3. **用户认证与授权**:系统需要有用户登录、注册、权限管理等功能。Flask-Login和Flask-Security是两个常用的...

    Python-51商城

    《Python-51商城》项目是一个使用Python编程语言构建的电子商务平台,主要涵盖了商城系统的基本功能,包括用户交互和后台管理。这个项目是适合于学习、毕业设计或课程设计实践的绝佳实例,提供了完整的源码供学习者...

    DINP demo:使用Flask的Python项目-dinp-demo-python-flask.zip

    【标题】"DINP demo:使用Flask的Python项目" 涉及到的是一个基于Python的Web应用开发,具体使用了流行的轻量级框架Flask。DINP(可能是一个项目或技术的缩写)在此上下文中代表了一个演示应用,旨在展示如何使用...

    Those years of learning Python - 这些年学习的Python.zip

    类与对象的概念,继承、封装和多态等面向对象原则是Python中深入学习的内容。例如,如何定义一个类,创建对象,以及如何使用类的属性和方法。 文件操作是Python中的实用技能,包括文件的打开、读取、写入、追加和...

    Python-LeanCloud文档的dashdoc版

    3. ** 数据对象和模型 **:LeanCloud提供了基于NoSQL的数据存储服务,开发者需要定义数据模型,创建对应的Python类。理解数据对象的属性、关系以及如何进行CRUD(创建、读取、更新、删除)操作是核心内容。 4. ** ...

    Python-geojsonGeoJSON的Python绑定及工具

    1. **序列化与反序列化**:`geojson`库提供了将Python对象转换为GeoJSON字符串(序列化)以及从GeoJSON字符串或文件中创建Python对象(反序列化)的功能。 2. **创建GeoJSON对象**:你可以通过构造函数创建GeoJSON...

Global site tag (gtag.js) - Google Analytics