调用类的其他信息

上一讲中提到,在定义方法时,必须有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. angular4 Form表单相关

    ng4中,有两种方式去声明一个表单 一:Template-Driven Forms - 模板驱动式表单   [引入FormsModule] 1.ngForm赋值 [可以方便的获取表单的值] <f ...

  2. 想真正了解JAVA设计模式看着一篇就够了。 详解+代码实例

    Java 设计模式   设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结 设计模式分为 23 种经典的模式,根据用途我们又可以分为三大类.分别是创建型模式.结构型模式和行为型模式 列举几种设 ...

  3. day18 17.c3p0连接池使用

    连接池时间长不用空闲着,dbcp是不回收的,性能可能有些问题.c3p0是可以自动回收.实际开发中c3p的生产力比dbcp强,性能上更强. package cn.itcast.datasource; i ...

  4. 编译libusb库

    之前需要安装依赖库 : libudevautomakeautoconflibtool ./bootstrap.sh ./configure --with-pic --prefix=/home/libu ...

  5. AppScan操作手册

    AppScan操作手册 转自:http://blog.51cto.com/zhouanya/1388681   1.SQL注入 1.1.什么是sql注入 所谓SQL注入(SQL Injection), ...

  6. JS---案例:拖曳对话框

    案例:拖曳对话框 ps: 实际没有要拖曳登录框的需求,只是演示拖曳的这个效果 1. 获取超链接,注册点击事件,显示登陆框和遮挡层 2. 获取关闭,注册点击事件,隐藏登陆框和遮挡层 3. 按下鼠标,移动 ...

  7. C++ UNREFERENCED_PARAMETER函数的作用

    新建win32 application程序,会有这样一段代码 int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hP ...

  8. [Vue CLI 3] 配置解析之 parallel

    官方文档中介绍过在 vue.config.js 文件中可以配置 parallel,作用如下: 是否为 Babel 或 TypeScript 使用 thread-loader. 该选项在系统的 CPU ...

  9. 洛谷 P1858 多人背包 DP

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 洛谷 P1858 多人背包 题目描述 求01背包前k优解的价值 ...

  10. Leetcode905.Sort Array By Parity按奇偶排序数组

    给定一个非负整数数组 A,返回一个由 A 的所有偶数元素组成的数组,后面跟 A 的所有奇数元素. 你可以返回满足此条件的任何数组作为答案. 示例: 输入:[3,1,2,4] 输出:[2,4,3,1] ...