[python 笔记4]类(面向对象?)
2015-08-07 11:12
441 查看
1、定义
__init__()为构造函数
其中__metaclass__=type确定使用新式类,python3.0以后就不用考虑新式类的问题,类的定义:
显然在类的定义中每一个函数参数列表的第一个都应该是self,self也就是对象本身,而self也是区分方法和对象函数的标志。
2、访问权限
通过上面的案例,可以发现对象的属性也是可以在外部进行访问的。
PS:熟悉c++的同学都知道,将对象的属性暴露在外面是非常危险的。
在python 中并没有private关键字,而是使用双下划线”__”来完成属性的私有化,当然不只是属性,类中的方法也是使用同样的方法
我们可以发现使用类中的方法可以继续访问对象的属性,在类外访问是失败的。
但是python中并没有什么特殊机制,而是将有双下划线的属性前面加上单下划线和类名,
例如:__name->_Person__name
如果这样还是可以继续访问的。
3、继承
继承不多介绍,就像上面的例子,在类名后面的括号内的类都是该类的父类,当有多个类为父类时,使用’,’间隔。子类继承父类,构造函数使用super(函数,构造父类继承来的属性方法等。
__metaclass__=type class Person: def __init__(self,name,age): self.name=name self.age=age def setName(self,name): self.name=name def getName(self): return self.name def setAge(self,age): self.age=age def getAge(self): return self.age p1=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=name self.age=age def setName(self,name): self.name=name def getName(self): return self.name def setAge(self,age): self.age=age def getAge(self): return self.age p1=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=name self.__age=age def setName(self,name): self.__name=name def getName(self): return self.__name def setAge(self,age): self.__age=age def getAge(self): return self.__age p1=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=name self.__age=age def setName(self,name): self.__name=name def getName(self): return self.__name def setAge(self,age): self.__age=age def getAge(self): return self.__age p1=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=name self.__age=age def setName(self,name): self.__name=name def getName(self): return self.__name def setAge(self,age): self.__age=age def getAge(self): return self.__age class ITer(Person): def __init__(self,name,age,lan): super(ITer,self).__init__(name,age) self.lan=lan def getLan(self): return self.lan def setLan(self,lan): self.lan=lan p2=ITer('Sun',22,'python') print p2.getLan() print p2.getName()
相关文章推荐
- python类、对象区别
- python命令行参数
- 流动python - 八皇后问题简单解决方案
- python基础学习笔记<数据库>
- python学习之 字符串前'r'的用法
- python基础学习笔记<内建模块与第三方模块>
- python lib 安装遇到报错clang: error: unknown argument: '-mno-fused-madd'
- Python爬虫框架Scrapy实战之批量抓取招聘信息
- Python多线程,生产者-消费者-终结者
- python 工作自动签到记录
- 零基础学python-初识python与python的解释过程
- 零基础学python-初识python与python的解释过程
- python装饰器的理解
- 670个常用的Python库和示例代码
- python_class_1 How to use def
- 教你用200行Python代码“换脸”
- 用python来爬某电影网站的下载地址
- Python调用百度API之天气查询
- python中MySQLdb模块用法实例
- Read Large Files in Python