[python 笔记4]类(面向对象?)
来源:互联网 发布:佳能ip2880清零软件 编辑:程序博客网 时间:2024/05/19 04:28
1、定义
__metaclass__=typeclass Person:def __init__(self,name,age):self.name=nameself.age=agedef setName(self,name):self.name=namedef getName(self):return self.namedef setAge(self,age):self.age=agedef getAge(self):return self.agep1=Person('C++','22')print p1.getName()p1.setName('Python')print p1.getName()print p1.name
__init__()为构造函数
其中__metaclass__=type确定使用新式类,python3.0以后就不用考虑新式类的问题,类的定义:
class Person(object):def __init__(self,name,age):self.name=nameself.age=agedef setName(self,name):self.name=namedef getName(self):return self.namedef setAge(self,age):self.age=agedef getAge(self):return self.agep1=Person('C++','22')print p1.getName()p1.setName('Python')print p1.getName()print p1.name
显然在类的定义中每一个函数参数列表的第一个都应该是self,self也就是对象本身,而self也是区分方法和对象函数的标志。
2、访问权限
通过上面的案例,可以发现对象的属性也是可以在外部进行访问的。
PS:熟悉c++的同学都知道,将对象的属性暴露在外面是非常危险的。
在python 中并没有private关键字,而是使用双下划线”__”来完成属性的私有化,当然不只是属性,类中的方法也是使用同样的方法
class Person(object):def __init__(self,name,age):self.__name=nameself.__age=agedef setName(self,name):self.__name=namedef getName(self):return self.__namedef setAge(self,age):self.__age=agedef getAge(self):return self.__agep1=Person('C++','22')print p1.getName()p1.setName('Python')print p1.getName()print p1.__name
我们可以发现使用类中的方法可以继续访问对象的属性,在类外访问是失败的。
但是python中并没有什么特殊机制,而是将有双下划线的属性前面加上单下划线和类名,
例如:__name->_Person__name
class Person(object):def __init__(self,name,age):self.__name=nameself.__age=agedef setName(self,name):self.__name=namedef getName(self):return self.__namedef setAge(self,age):self.__age=agedef getAge(self):return self.__agep1=Person('C++','22')print p1.getName()p1.setName('Python')print p1.getName()print p1._Person__name
如果这样还是可以继续访问的。
3、继承
继承不多介绍,就像上面的例子,在类名后面的括号内的类都是该类的父类,当有多个类为父类时,使用’,’间隔。子类继承父类,构造函数使用super(函数,构造父类继承来的属性方法等。
class Person(object):def __init__(self,name,age):self.__name=nameself.__age=agedef setName(self,name):self.__name=namedef getName(self):return self.__namedef setAge(self,age):self.__age=agedef getAge(self):return self.__ageclass ITer(Person):def __init__(self,name,age,lan):super(ITer,self).__init__(name,age)self.lan=landef getLan(self):return self.landef setLan(self,lan):self.lan=lanp2=ITer('Sun',22,'python')print p2.getLan()print p2.getName()
0 0
- [python 笔记4]类(面向对象?)
- Python笔记(4)----Python面向对象
- Python笔记:面向对象,类
- python 面向对象笔记
- python面向对象笔记
- Python笔记(4):面向对象,迭代器,生产器
- Python进阶笔记(4)_ 面向对象编程基础
- python-基础笔记4-面向对象
- Python学习笔记----面向对象(类)
- Python学习笔记(2)--面向对象
- Python学习笔记(九):面向对象
- python学习笔记(面向对象)
- python学习笔记(三)面向对象
- Python 面向对象(4)
- python 学习笔记--面向对象
- python笔记11--面向对象
- python笔记之面向对象
- 【笔记】Python面向对象编程
- eclipse 导入项目后中文乱码问题
- JS函数全集
- 低功耗无线433MHz芯片及模块特点及组网应用类型
- Xcode6 创建空白工程
- Highmaps上海地区地图数据JSON格式
- [python 笔记4]类(面向对象?)
- 自定义控件(五)画一条线
- QT 总结(二) Qt Creator应用程序发布及修改应用程序图标的方法
- HTTP状态码
- 几何画板中怎样绘制圆柱
- HDU 4998 Rotate (2014年鞍山赛区网络赛B题)
- android开源动画库nineoldandroids
- CentOS6.5 heartbeat高可用集群的详解及工作流程
- accept: Invalid argument