文档章节

对象属性和操作函数

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
JS面向对象的程序设计

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

Elivense
2016/12/20
16
0

没有更多内容

加载失败,请刷新页面

加载更多

js的

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <c:forEach items="${topics}" var="item" varStatus="status"> </c:forEach> 注意 c:forEach E大写 varStatus ......

踏破铁鞋无觅处
23分钟前
0
0
带你走进java集合之ConcurrentHashMap

一、概述 上一篇文章《带你走进java集合之HashMap》分析了HashMap的实现原理,重点分析了HashMap是怎么样的一种数据结构,以及如何去插入,查询,扩容等操作。相信经过上一篇文章的学习,大家...

木木匠
24分钟前
0
0
spring-boot 热加载实现替换

参考资料 1、spring-boot 热加载实现替换

哎小艾
26分钟前
0
0
kotlin使用spring mvc(二)

使用FilterRegistrationBean注册Filter 使用WebFilter配置过滤器的缺点是不可以对过滤器进行排序,但是使用FilterRegistrationBean可以设置Filter执行的顺序 编写过滤器 class CustomFilter...

weidedong
27分钟前
0
0
Qt那些事0.0.5

碰到了中文乱码问题。 虽然是自己做了件令自己都不齿的事情,但是情急之下,暂且如此:将中文硬编码进代码中。 我也想通过tr+qm翻译进行转换,但是难过的是,tr之后,找不到或者不起作用。这...

Ev4n
28分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部