文档章节

对象属性和操作函数

lln133208
 lln133208
发布于 2015/02/28 22:31
字数 868
阅读 15
收藏 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
南京
一张图理解JS的原型(prototype、_proto_、constructor的三角关系)

注意:前方高能预警,请认真仔细看完,阅读完后自己再次画下原型图,相信你一定会有更深刻的认识。(推荐炒鸡好用的画流程图的软件ProcessOn) 构造函数:function Foo ( ) { }; 实例对象:let...

粿粿乐
08/15
0
0
深入理解ES6--12.代理与反射接口

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

你听___
05/05
0
0
JavaScript的类和对象-创建对象(上)

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

coda
2012/08/29
0
0
ECMAScript Proxy和Reflect

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

墨马
2017/10/23
0
0
JavaScript创建对象的7种模式

1、工厂模式 这种模式抽象了创建具体对象的过程 考虑到在 ECMAScript 中无法创建类,开发人员就发明了一种函数,用函数来封装以特定接口创建对象的细节 函数 createPerson() 能够根据接受的参...

Mohan710
08/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

centos7安装redis及开机启动

配置编译环境: sudo yum install gcc-c++ 下载源码: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 解压源码: tar -zxvf redis-3.2.8.tar.gz 进入到解压目录: cd redis-3......

hotsmile
39分钟前
0
0
Confluence 6 数据库和临时目录

数据库 所有的其他数据库,包括有页面,内容都存储在数据库中。如果你安装的 Confluence 是用于评估或者你选择使用的是 Embedded H2 Database 数据库。数据库有关的文件将会存储在 database...

honeymose
53分钟前
1
0
day62-20180820-流利阅读笔记

1.今日导读 2.带着问题听讲解 3.新闻正文(中英文对照) 4.重点词汇 5.拓展内容

aibinxiao
今天
0
0
分布式锁实现及对比

一、问题介绍 日常工作中很多场景下需要用到分布式锁,例如:任务运行(多个节点同一时刻同一个任务只能在一个节点上运行(分片任务除外)),交易接受(前端交易请求发送时,可能由于两次提...

yangjianzhou
今天
6
0
【AI实战】快速掌握TensorFlow(二):计算图、会话

在前面的文章中,我们已经完成了AI基础环境的搭建(见文章:Ubuntu + Anaconda + TensorFlow + GPU + PyCharm搭建AI基础环境),以及初步了解了TensorFlow的特点和基本操作(见文章:快速掌握...

雪饼
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部