调用类的其他信息

上一讲中提到,在定义方法时,必须有self这一个参数,这个参数表示某个对象,对象有有类的所有性质,

那么我么可以通过self 调用类属性。

class Human(object):

  laugh = 'hahhahahahha'

  def show_laugh(self):

    print self.laugh

  def laugh_100th(self):

    for i in range(100):

      self.show_laugh()

li_lei = Human()

li_lei.laugh_100th()

这里有一个类属性laugh. 在方法show_laugh()中,通过self.laugh ,调用了该属性的值。

还可以用相同的方式调用其他方法,方法show_laugh(),在方法laugh_100th()被调用。

通过对象可以修改类属性值,但这是危险的,类属性被所有用一类及其子类的对象共享,类

属性值的改变会影响所有的对象。

__init__ ()  方法

__init__()  是一个特殊方法(special method).Python有一些特殊方法,Python会特殊的对待他们,特殊方法

的特点是名字前后有两个下划线。

如果你在类中定义了 __init__() 这个方法,创建对象时,Python 会自动调用这个方法,这个过程也叫初始化。

class happyBird(Bird):

  def  __init__(self,more_words):

    print 'We are happy birds.',more_words

summer = happyBird('Happy,Happy!')

这里继承了Bird类

屏幕上打印:

We are happy birds.Happy,Happy!

我们看到,尽管我们只是创建了summer对象,但__init__()方法被自动调用了,最后一行的语句(summer =

happyBird ....)先创建了对象,然后执行:

summer.__init__(more_words)

'Happy,Happy!' 被传递给了__init__() 的参数more_words

对象的性质

我们讲到了许多属性,但这些属性是类的属性。所有属于该类的对象会共享这些属性,比如说,鸟都有羽毛,

鸡都不会飞。

在一些情况下,我们定义对象的性质,用于记录该对象的特别信息,比如说,人这个类,性别是某个人的一个性质,

不是所有的人类的都是男,或者都是女,这个性质的值随着对象的不同而不同,李雷是人类的一个对象,

性别是男,韩美美也是人类的一个对象,性别是女。

当定义类的方法时,必须要传递一个self 的参数,这个参数指代的就是类的一个对象,我们可以通过操纵

self ,来修改某个对象的性质。比如用类来新建一个对象,即下面例子中的li_lei,那么li_lei就被self 表示。

我们通过赋值给 self.attribute,给li_lei 这一对象增加一些性质,比如说性别的男女,self会传递给各个方法,

在方法内部,可以通过引用self.attribute, 查询或修改对象的性质。

这样,在类属性之外,又给每个对象增添了各自特色的性质,从而能描述多样的世界。

class Human(object):

  def __init__(self,input_gender):

    self.gender = input_gender

  def printGender(self)

     print self.gender

li_lei = Human('male') # 这里 'male' 作为参数传递给 __init__() 方法的input_gender 变量。

print li_lei.gender

li_lei.printGender()

在初始化中,将参数input_gender,赋值给对象的性质,即self.gender.

li_lei 拥有了对象性质gender. gender不是一个类属性,Python在建立了li_lei这一对象之后,使用li_lei.gender
这一对象性质,专门存储属于对象li_lei 的特有信息。

对象的性质也可以被其他方法调用,调用方法与类属性的调用相似,正如在printGender()方法中的调用。

总结

通过self调用类属性

__init__(): 在建立对象时自动执行

类属性和对象的性质的区别

Python 基础09 面向对象的进一步拓展的更多相关文章

  1. Python基础09 面向对象的进一步拓展

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们熟悉了对象和类的基本概念.我们将进一步拓展,以便能实际运用对象和类. 调用类的 ...

  2. Python 基础 四 面向对象杂谈

    Python 基础  四  面向对象杂谈 一.isinstance(obj,cls) 与issubcalss(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls ...

  3. 自学Python之路-Python基础+模块+面向对象+函数

    自学Python之路-Python基础+模块+面向对象+函数 自学Python之路[第一回]:初识Python    1.1 自学Python1.1-简介    1.2 自学Python1.2-环境的 ...

  4. 二十. Python基础(20)--面向对象的基础

    二十. Python基础(20)--面向对象的基础 1 ● 类/对象/实例化 类:具有相同属性.和方法的一类人/事/物 对象(实例): 具体的某一个人/事/物 实例化: 用类创建对象的过程→类名(参数 ...

  5. python基础,函数,面向对象,模块练习

    ---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? #  [] {} () None 0 2,位和字节的关系? # ...

  6. (转)Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...

  7. Day7 - Python基础7 面向对象编程进阶

    Python之路,Day7 - 面向对象编程进阶   本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个 ...

  8. Python基础7 面向对象编程进阶

    本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 经典 ...

  9. python基础之面向对象高级编程

    面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个"函数"供使用(可以讲多函数中公用的变量封装到对象中) ...

随机推荐

  1. Could not parse mapping document from resource com/hs/model/StudentModel.hbm.xml

    网上出现这个问题的 lei.hbm.xml配置写错的,文件头应该改为如下,并不是这个问题 <?xml version="1.0"?> <!DOCTYPE hibe ...

  2. 基础架构:一条SQL查询语句是如何执行的?

    https://time.geekbang.org/column/article/68319?code=pEYaxHnjO23LQHW4CJgL706EXlpAJnbOOiT2y42cWwU%3D 这 ...

  3. 强强联合 阿里云 RDS for SQL Server 与 金蝶 K/3 WISE 产品实现兼容适配

    强强联合 阿里云 RDS for SQL Server 与 金蝶 K/3 WISE 产品实现兼容适配,原K/3 WISE用户通过简单配置就可以无缝搭配RDS SQL Server使用,不需再费时费力自 ...

  4. activity与fragment之间的传递数据

    首先activity之间的数据传递就是 用intent和intent+bundle intent 传递 Intent i= new Intent(MainActivity.this,TheAty.cl ...

  5. php require_once的使用方法

    学习笔记 require_once 语句和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含. equire_once() 为了避免重复加载文件. ...

  6. 使用idea工具的几个个性化步骤

    1.更改背景样式2.添加激情代码插件 Power mode II3.安装省略 getset 插件 Lombok 引入pom.xml <!-- 此组件可以用来实体类 省略 getset 构造等等 ...

  7. BootstrapValidator实现注册校验和登录错误提示效果(转)

    使用BootstrapValidator进行注册校验和登录错误提示,具体内容如下 1.介绍 在AdminEAP框架中,使用了BootstrapValidator校验框架,本文以注册校验的用户名.登录名 ...

  8. 深入浅出Javascript闭包

    一.引子 闭包(closure)是 Javascript 语言的一个难点,面试时常被问及,也是它的特色,很多高级应用都要依靠闭包实现.本文尽可能用简单易懂的话,讲清楚闭包的概念.形成条件及其常见的面试 ...

  9. 通用、封装、简化 webpack 配置

    通用.封装.简化 webpack 配置 现在,基本上前端的项目打包都会用上 webpack,因为 webpack 提供了无与伦比强大的功能和生态.但在创建一个项目的时候,总是免不了要配置 webpac ...

  10. Python数据分析与展示[第三周](pandas数据类型操作)

    数据类型操作 如何改变Series/ DataFrame 对象 增加或重排:重新索引 删除:drop 重新索引 .reindex() reindex() 能够改变或重排Series和DataFrame ...