文档章节

对象属性和操作函数

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原型链与继承

原型链 原型链一直都是一个在JS中比较让人费解的知识点,但是在面试中经常会被问到,这里我来做一个总结吧,首先引入一个关系图: 一.要理解原型链,首先可以从上图开始入手,图中有三个概念...

最爱你的我
12/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Deepin 安装wireshark抓包工具

一、关于deepin和wireshark deepin目前已经发展到15.8了,开发Android毫无压力,在四个月的使用时间里,已经非常习惯了。目前想处理一些网络问题,因此尝试在deepin上安装一个抓包工具。dee...

IamOkay
13分钟前
0
0
Docker镜像仓库服务-Nexus

建立云原生集群系统,建立自己的私有Docker镜像仓库必不可少。一方面可以加快多节点部署容器镜像的下载速度,另一方面是为了安全(容器里存储有系统所有的信息、包括密码、数据库等等,切记不...

openthings
25分钟前
1
0
127.0.0.1 和 0.0.0.0 地址的区别

1. IP地址分类 1.1 IP地址表示 IP地址由两个部分组成,net-id和host-id,即网络号和主机号。 net-id:表示ip地址所在的网络号。 host-id:表示ip地址所在网络中的某个主机号码。 即: IP-a...

华山猛男
今天
19
0
解决Unknown host 'd29vzk4ow07wi7.cloudfront.net'. You may need to adjust the proxy settings in Gradle.

把 总项目 下的 build.gradle 中的 两个 jcenter() 用 maven{ url ‘http://maven.aliyun.com/nexus/content/groups/public/’} 代替。...

lanyu96
今天
4
0
基于redis的分布式锁

redisson提供了基于redis的分布式锁实现方式,本文就尝试了下锁的使用方式。Redisson同时还为分布式锁提供了异步执行的相关方法,第二节执行介绍。 一、可重入锁验证 同一个jvm里面同一线程的...

noob_chr
今天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部