文档章节

对象属性和操作函数

lln133208
 lln133208
发布于 2015/02/28 22:31
字数 868
阅读 14
收藏 0
点赞 0
评论 0

##创建类和实例## class Student(object): pass class为定义类的关键字,Student为类名,通常类名的首字母为大写。后跟括号中的object为该类的基类baseclass,表明Student是从object继承而来。

类是抽象的概念,而实例是类的具体实现。

student1 = Student()

实例student1中就具有了属于自己的属性和方法,这里可以和C++相对比,属性相当于数据,方法相当于操作函数。

class Student(object):
    def __init__(self,x,y):
        self.x = x
        self.y = y
    def printf(self):
        print self.x
        print self.y

上述代码中__init__(self,x,y)相当于C++的构造函数,其中self表明方法是对自身的操作,在类中定义的函数都至少要有一个参数***self***,而且是第一个参数。其余参数还可以正常使用默认参数,可变参数,关键字参数等。在这里类的实例化需要使用如下的代码:

student2 = Student(1,2)

##面向对象编程的特点##

  1. 封装

    对于类中的数据,可以通过外部的函数来访问,也可以在类中定义函数,通过这些内部函数来处理数据,这样从外部来看,数据只能通过方法来进行处理,相当于封装在实例内部,在一定程度上保证了数据安全。其实python中很难像C++一样严格保证内部私有数据无法从外部直接访问,在编程过程中,需要自己来遵循,使用内部定义的函数来处理数据。

    封装使编程时可以直接使用内部函数,而不需要关注其中实现细节,而且也方便增加函数。

  2. 继承

     class Animal(object):
         def run(self):
             print 'animal is running...'
    
     class Dog(Animal):
         pass
    
     animal1 = Animal()
     dog1 = Dog()
    

    上述代码中定义了Animal类和Dog类,其中Dog子类subclassAnimal类称作基类Base class。这里Dog类继承了Animal类的属性和方法,实例dog1拥有了方法run()。 继承可以在已经存在的类的基础上生成一种新类,后者拥有前者所有的属性和方法,也可以额外增加属性和方法。

  3. 多态

     class Animal(object):
         def run(self):
             print 'animal is running...'
    
     class Dog(Animal):
         def run(self):
             print 'dog is running...'
    
     dog2 = Dog()
    

    上述代码在子类Dog中定义了名为run的函数,与基类Animal中的方法同名。此时子类实例调用该方法时,则默认使用子类方法,即子类方法覆盖基类方法。

    著名的开闭原则

    • 对扩展开放:允许新增子类
    • 对修改封闭:不需要修改依赖基类类型的函数

##对象类型判断## ###type()### 类型常量从types模块导入,常用的有

  • types.ListType

      `type([1,2,3])` 
    
  • types.IntType

      `type(1)`
    
  • types.FloatType

      `type(1.2)`
    
  • types.StringType

      `type('hello')`
    
  • types.TypeType

      `type(str)`等
    

对于类,使用type()***不会***认为子类也属于基类。

###isinstance()### 使用isinstance()认为子类也属于基类。

##对象属性和方法的获取和设置##

  • hasattr(a,'x') 判断对象中是否有该属性x,若有返回True,否则返回False
  • getattr(a,'x',default_value) 获得对象中属性x的值,若x存在返回值,否则返回default_value。 若不设置default,对象中没有x时返回False
  • setattr(a,'x',value) 设置对象属性x的值为value

© 著作权归作者所有

共有 人打赏支持
lln133208
粉丝 2
博文 19
码字总数 11023
作品 0
南京
深入理解ES6--12.代理与反射接口

主要知识点:代理和反射的定义、常用的陷阱函数、可被撤销的代理、将代理对象作为原型使用、将代理作为类的原型 1. 代理和反射 代理是什么? 通过调用 ,你可以创建一个代理用来替代另一个对...

你听___ ⋅ 05/05 ⋅ 0

JavaScript的类和对象-创建对象(上)

JavaScript中没有类的概念,因此它的对象也与基于类的语言中的对象有所不同,可以把JavaScript的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数。 创建对象 1 工厂模式 可以...

coda ⋅ 2012/08/29 ⋅ 0

ECMAScript Proxy和Reflect

Proxy概述 Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程 Proxy可以理解成,在目标对象之前架设一层“拦...

墨马 ⋅ 2017/10/23 ⋅ 0

(第二天)原型、继承

原型 引入 我们依然定义一个Person类 1 function person(age,name){2 this.age = age;3 this.name = name;4 this.information = function(){5 return "年龄"+ this.age+","+"名字"+ this.nam......

jeffcky ⋅ 2015/07/30 ⋅ 0

JS面向对象的程序设计

面向对象的语言有一个标志,即拥有类的概念,抽象实例对象的公共属性与方法,基于类可以创建任意多个实例对象,一般具有封装、继承、多态的特性!但JS中对象与纯面向对象语言中的对象是不同的...

Elivense ⋅ 2016/12/20 ⋅ 0

ECMAScript 6教程 (二) 对象和函数

对象 属性的简洁表示法 ES6允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。 function f( x, y ) { return { x, y };}// 等同于function f( x, y ) { return { x: x, y...

笔阁 ⋅ 2015/07/20 ⋅ 0

jQuery函数attr()和prop()的区别

在jQuery中,attr()函数和prop()函数都用于设置或获取指定的属性,它们的参数和用法也几乎完全相同。 但不得不说的是,这两个函数的用处却并不相同。下面我们来详细介绍这两个函数之间的区别...

Apirl ⋅ 05/16 ⋅ 0

《javaScript权威指南》随读笔记(一)

持续更新,直到看完,中间如果有什么纪录不对或者有疑问的,还希望和大家一起讨论 2016/03/28 在ECMAScript 5中,字符串可以当作只读数组,除了用charAt()方法,也可以用括号来访问字符串中的...

邪气小生 ⋅ 2016/03/29 ⋅ 0

测试一下JS基本功(附答案)

一、基础题 1、js包含哪三部分 答:Bom:(browser object model)浏览器对象 Dom:(document object model)文档对象,提供一套完整的操作页面的api ECMAScript:规定了语法规范 2、js的基...

阡陌有客 ⋅ 2017/11/27 ⋅ 0

03-老马jQuery教程-DOM操作

jQuery DOM操作 在没有jQuery之前,DOM的操作相对来说有点麻烦,尤其是DOM节点的搜索。目前我们已经学习了jQuery的选择器,接下带大家一块学习jQuery的DOM操作,jQuery对DOM操作的封装让我们...

aicoder ⋅ 2017/11/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java的Excel导出工具类

首先在POM中引入需要的Jar <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency><dependency><groupId>o......

Kxvz ⋅ 1分钟前 ⋅ 0

Java 3DES加密解密

import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.binary.Base64; //算法代码[java] view plain copy /** * 转换成十六进制字......

说回答 ⋅ 8分钟前 ⋅ 0

php 浮点型计算精度问题

今天碰到一个金额计算的问题,浮点数做差,结果有误(精度有问题)。 $a = floatval('6');$b = floatval('4.99');$m = floatval('1');$r = $a - $b;$r = $r - $m;var_dump($r);//f...

stupidboy ⋅ 30分钟前 ⋅ 0

Mahout推荐算法之SlopOne

一、 算法原理 有别于基于用户的协同过滤和基于item的协同过滤,SlopeOne采用简单的线性模型估计用户对item的评分。如下图,估计UserB对ItemJ的偏好 图(1) 在真实情况下,该方法有如下几个...

xiaomin0322 ⋅ 35分钟前 ⋅ 0

LVM讲解

LVM是什么 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地...

李超小牛子 ⋅ 44分钟前 ⋅ 0

mysql更改密码、连接mysql、mysql常用命令

1. 更改mysql的root账户密码: mysql中root账户和系统root不是一个账户 1.1 更改环境变量PATH,增加mysql绝对路径 由于mysql安装目录为/usr/local/mysql/,所以系统不能直接使用mysql,需把/...

laoba ⋅ 45分钟前 ⋅ 0

阿里云发布企业数字化及上云外包平台服务:阿里云众包平台

摘要: 阿里云正式发布旗下众包平台业务(网址:https://zhongbao.aliyun.com/),支持包括:网站定制开发,APP、电商系统等软件开发,商标、商品LOGO、VI、产品包装设计、营销推广、大数据人...

猫耳m ⋅ 45分钟前 ⋅ 0

阿里云发布企业数字化及上云外包平台服务:阿里云众包平台

摘要: 阿里云正式发布旗下众包平台业务(网址:https://zhongbao.aliyun.com/),支持包括:网站定制开发,APP、电商系统等软件开发,商标、商品LOGO、VI、产品包装设计、营销推广、大数据人...

阿里云云栖社区 ⋅ 49分钟前 ⋅ 0

1.03-Maven中使用ueditor富文本编辑器

起因:在maven仓库未找到百度的ueditor的jar包 操作: 1.下载百度的ueditor的jar包 2.打开命令行,切换到ueditor的下载位置,运行一下命令: mvn install:install-file -Dfile=ueditor-1.1....

静以修身2025 ⋅ 54分钟前 ⋅ 0

几道Spring 面试题

1、BeanFactory 接口和 ApplicationContext 接口有什么区别? ApplicationContext 接口继承BeanFactory接口 Spring核心工厂是BeanFactory BeanFactory采取延迟加载,第一次getBean时才会初始...

职业搬砖20年 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部