我们熟悉了对象和类的基本概念。我们将进一步拓展,以便能实际运用对象和类。
调用类的其它信息
上一讲中提到,在定义方法时,必须有self这一参数。这个参数表示某个对象。对象拥有类的所有性质,那么我们可以通过self,调用类属性。
class Human(object): laugh = 'hahahaha' 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()
还可以用相同的方式调用其它方法。方法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_wordssummer = happyBird('Happy,Happy!')
屏幕上打印:
We are happy birds.Happy,Happy!
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.genderli_lei = Human('male') # 这里,'male'作为参数传递给__init__()方法的input_gender变量。 print li_lei.gender li_lei.printGender()
li_lei拥有了对象性质gender。gender不是一个类属性。Python在建立了li_lei这一对象之后,使用li_lei.gender这一对象性质,专门储存属于对象li_lei的特有信息。
对象的性质也可以被其它方法调用,调用方法与类属性的调用相似,正如在printGender()方法中的调用。
总结
通过self调用类属性
__init__(): 在建立对象时自动执行
类属性和对象的性质的区别
本文向大家介绍Java基础教程之对象引用,包括了Java基础教程之对象引用的使用技巧和注意事项,需要的朋友参考一下 我们之前一直在使用“对象”这个概念,但没有探讨对象在内存中的具体存储方式。这方面的讨论将引出“对象引用”(object reference)这一重要概念。 对象引用 我们沿用之前定义的Human类,并有一个Test类: 外部可以调用类来创建对象,比如上面在Test类中: 创建了一个H
本文向大家介绍python基础教程之常用运算符,包括了python基础教程之常用运算符的使用技巧和注意事项,需要的朋友参考一下 Python的运算符和其他语言类似 (我们暂时只了解这些运算符的基本用法,方便我们展开后面的内容,高级应用暂时不介绍) 数学运算 判断 判断是真还是假,返回True/False (还有is, is not等, 暂时不深入) 逻辑运算 True/False之间的运算 可以
本文向大家介绍Javascript基础教程之函数对象和属性,包括了Javascript基础教程之函数对象和属性的使用技巧和注意事项,需要的朋友参考一下 包含在对象里的数据可以通过两种方式来访问 既属性的对象(property)和方法(method) 属性是隶属于某个特定对象的变量,方法则是某个特定对象才能调运的函数。 对象是由一些彼此相关的属性和方法集合在一起的一个数据实体、javacript中,
本文向大家介绍python基础教程之面向对象的一些概念,包括了python基础教程之面向对象的一些概念的使用技巧和注意事项,需要的朋友参考一下 Python使用类(class)和对象(object),进行面向对象(object-oriented programming,简称OOP)的编程。 面向对象的最主要目的是提高程序的重复使用性。我们这么早切入面向对象编程的原因是,Python的整个概念是基于
本文向大家介绍python基础教程之Hello World!,包括了python基础教程之Hello World!的使用技巧和注意事项,需要的朋友参考一下 Python命令行 假设你已经安装好了Python, 那么在Linux命令行输入: 将直接进入python。然后在命令行提示符>>>后面输入: 可以看到,随后在屏幕上输出: print是一个常用函数,其功能就是输出括号中得字符串。 (在Pyth
本文向大家介绍Python 基础教程之str和repr的详解,包括了Python 基础教程之str和repr的详解的使用技巧和注意事项,需要的朋友参考一下 Python str和repr的详解 str可以将值转化为合理的字符串形式,以便用户可以理解; repr会以合法Python表达式的形式来表达值。 举例如下: 注意到,str表示一种类型,即字符串;repr则是一个函数。 如有疑问请留言或者到