标签:面向对象
类和对象
面向过程和面向对象的编程
面向过程的编程:函数式编程,c程序等
面向对象的编程:c++,JAVA ,python等
类和对象:是面向对象中的两个重要概念
类:是对事物的抽象,比如:汽车模型(某一类事物的描述,属性和方法)
对象:是类的一个实例,比如:qq轿车,大客车
范例说明:
汽车模型可以对汽车的特征和行为进行抽象,然后可以实例化为一台真实的汽车体现出来
Python类的定义:
python类的定义:
使用class关键字定义一个类,并且类名的首字母要大写;
当程序员需要创建的类型不能用简单类型表示时就需要创建类;
类把需要的变量和函数组合在一起, 这种包含称之为“封装”;
python类的结构:
>>>class 类名:
... 成员变量
... 成员函数
...
类的创建:范例
#!/usr/bin/python #coding:utf8 class Ren: #class关键字,类别首字母大写 name = "人" #属性 high = "一人高" #属性 wight = "一人重" #属性 def run(self): #成员函数定义方法; print "跑步"
#注意类当中定义成员函数时和外边定义函数时有区别,里边必须有一个形参,用来传递类当中的属性和方法,但调用的时候是不需要传参的
对象的创建:
创建对象的过程称之为实例化,当一个对象被创建后,包含三个方面的特性:对象的句柄、属性和方法。
句柄用于区分不同的对象;
对象的属性和方法与类中的成员变量和成员函数对应
#!/usr/bin/python #coding:utf8 class Ren: name = ‘人‘ high = ‘一人高‘ wight = ‘一人重‘ def run(self): #self 表示自己的类别 print ‘跑步‘ zhangsan = Ren() #从Ren 的类别中实例化一个对象 print zhangsan
[root@zabbix class]# python class.py <__main__.Ren instance at 0x7ff7f80110e0> #instance 实例 #列别中的实例(对象) #对象zhangsan具有属性和方法,zhangsan的属性就是类别中Ren的成员变量,方法就是类别中的函数
#属性的访问 (通过对象.)
..... print zhangsan.high [root@zabbix class]# python class.py 一人高
#对象属性的重新赋值
....... zhangsan.name = "张三" print zhangsan.name [root@zabbix class]# python class.py 张三
#注意:对象是从类别中实例化出来的,它具有类别的属性和方法,同时对象也是一个个体.
zhangsan.money = "10000" print zhangsan.money [root@zabbix class]# python class.py 10000
Python对象的体系结构:
-经典对象:内部由属性和方法组成,属性可以是数据类型也可以是函数类型。
如果属性为函数则该属性就是一个方法。
-新型对象-定义新型对象,必须继承object方法class_name(object)
新型对象提供了对类方法和静态方法的支持
.... class Ren(object):
类的属性:
类有属性和方法组成,类的属性是对数据的封装,类的方法则是对类的行为的封装。类的属性按使用范围分为私有属性和公有属性,类的属性范围取决于属性的名称
公有属性:所谓共有属性就是在类中和类外调用的属性
#!/usr/bin/python #coding:utf8 class Ren(object): name = ‘人‘ high = ‘一人高‘ wight = ‘一人重‘ def run(self): print self.name #调用内部属性,self代表本身,访问自己,调用类的属性 print ‘跑步‘ if __name__ == ‘__main__‘: zhangsan = Ren() zhangsan.name = "张三" print zhangsan.name #外部访问 zhangsan.run() print Ren.name #通过类名访问属性
私有属性:不能被类以外的函数调用
#!/usr/bin/python #coding:utf8 class Ren(object): name = ‘人‘ high = ‘一人高‘ wight = ‘一人重‘ __money = ‘1000‘ def run(self): print self.name print ‘跑步‘ if __name__ == ‘__main__‘: zhangsan = Ren() zhangsan.name = "张三" print zhangsan.__money [root@zabbix class]# python class.py Traceback (most recent call last): File "class.py", line 15, in <module> print zhangsan.__money AttributeError: ‘Ren‘ object has no attribute ‘__money‘ #无法调用
#!/usr/bin/python #coding:utf8 class Ren(object): name = ‘人‘ high = ‘一人高‘ wight = ‘一人重‘ __money = ‘1000‘ def run(self): print self.name print ‘跑步‘ def say(self): #内部方法中调用 print self.__money if __name__ == ‘__main__‘: zhangsan = Ren() zhangsan.name = "张三" print zhangsan.say() #通过内部调用方法显示,实现对数据的封装、隐藏
(可以通过instance._classname_attribute方式访问,但只用于调式程序)
print zhangsan._Ren__money
定义方式:以“__”双下划线开始的成员变量就是私有属性,否则就是公有属性
内置属性:有系统在定义类的时候默认添加的,由前后两个下划线构成__dict__,__module__
...... print Ren.__dict__ [root@zabbix class]# python class.py 人 ################################################## {‘high‘: ‘\xe4\xb8\x80\xe4\xba\xba\xe9\xab\x98‘, ‘__module__‘: ‘__main__‘, ‘run‘: <function run at 0x7f9ebdb60230>, ‘name‘: ‘\xe4\xba\xba‘, ‘__dict__‘: <attribute ‘__dict__‘ of ‘Ren‘ objects>, ‘__weakref__‘: <attribute ‘__weakref__‘ of ‘Ren‘ objects>, ‘__doc__‘: None, ‘wight‘: ‘\xe4\xb8\x80\xe4\xba\xba\xe9\x87\x8d‘, ‘say‘: <function say at 0x7f9ebdb608c0>, ‘_Ren__money‘: ‘1000‘}
本文出自 “思想大于技术” 博客,谢绝转载!
标签:面向对象
原文地址:http://linuxboys.blog.51cto.com/9150052/1662343