2018.12.5python笔记(3.0-3.2)
3.0 类的内置方法
Python内部类(类的嵌套)
所谓内部类,就是在类的内部定义的类,主要目的是为了更好的抽象现实世界。
例子:
汽车是个类,汽车的底盘,轮胎也可以抽象为类,将其定义到汽车类中,则形成内部类,更好的描述汽车类,因为底盘、轮胎是汽车的一部分。
比如os.path. path就是os中的内部类
创建内部类
#!/usr/bin/python
class People(object):
color = 'Yellow'
__age = 30
class Chinese(object): 内部类
print "I am chinese"
def think(self): print "I am a thinker" self.color='black' print "I am %s man" % self.color print self.__age @classmethod def test(self): print 'this is func' def __talk(self): print "I am talking with Tom"
jack = People()
People.test()
内部类的实例化方法
方法1:直接使用外部类调用内部类
object_name = outclass_name.inclass_name()
class People(object):
color = 'Yellow'
__age = 30
class Chinese(object):
name = "I am chinese"
jack = People.Chinese() 内部类实例化
print jack.name 实例化后可以访问内部类的属性
方法2:先对外部类进行实例化,然后再实例化内部类
out_name = outclass_name() 先实例化外部类
in_name = out_name.inclass_name() 使用外部类实例再实例化内部类
in_name.method() 使用实例化后的对象访问内部类中的方法
ren = People()
jack = ren.Chinese()
print jack.name
或者 使用 People.Chinese.name(或者People.Chinese().name) 直接访问类的属性
类的内置方法(魔术方法) 双下划线开头结尾
str(self)
def str(self): 重新定义内置方法
return "this is People class" 只能用return 不能使用print
对类实例化的时候 内置方法自动执行,不需要手动调用
构造函数与析构函数
-
构造函数:
析构函数:
用于初始化类的内部状态,Python提供的构造函数是init();
init()方法是可选的,如果不提供,Python会给出一个默认的init方法
def init(self): 自定义构造函数
self.color="black" 将类的属性重新初始化
ren = People()
ren.color 将打印black
People.color 还是打印yellow
构造函数只在类实例化的时候自动执行
通常可以去传个参数 init(self,c='white')
ren = People('green')
ren.color 将打印green
也可以在init中调用方法 这样实例化的时候直接调用方法
用于释放对象占用的资源,Python提供的析构函数是del();
del()也是可选的,如果不提供,则Python会在后台提供默认析构函数,一般在脚本最后执行
python 有垃圾回收机制
垃圾回收机制
Python采用垃圾回收机制来清理不再使用的对象;python提供gc模块释放不再使用的对象。
Python采用”引用计数”的算法方式来处理回收,即:当某个对象在其作用域内不再被其他对象引用的时候,python就自动清除对象;
gc模块的collect()可以一次性收集所有待处理的对象(gc.collect)
3.1(2) 类的继承
继承是面向对象的重要特性之一;
继承关系:继承是相对两个类而言的父子关系,子类继承了父类的所有公有属性和方法
继承实现了代码重用。
继承可以重用已经存在的数据和行为,减少代码的重复编写。Python在类名后使用一对括号来表示继承关系,括号中的类即为父类。
class Myclass(ParentClass)
如果父类定义了init方法,子类必须显式调用父类的init方法:
ParentClass.init(self, [args…])
如果子类需要扩展父类的行为,可以添加init方法的参数。
#!/usr/bin/python
class People(object):
color = 'Yellow'
def init(self): 定义构造函数
self.dwell = 'Earth'
def think(self): print "I am a thinker" print "I am %s man" % self.color
class Chinese(People): 定义子类,括号内声明父类的名字
pass
cn = Chinese() 子类实例化
print cn.color 子类实例可以访问父类属性
print cn.dwell 子类实例访问父类构造方法中的属性
如果init(self,c)有第二个参数,子类实例就无法直接调用,必须在子类中重写init函数
class Chinese(People):
def init(self):
People.init(self,'white') 重写父类init函数
super函数 也可以取继承父类
class A(object):
def init(self):
print "enter A"
print "leave A"
class B(A):
def init(self):
print "enter B"
super(B, self).init()
print "leave B"
b = B()
class Chinese(People):
def init(self):
#super(Chinese,self).init('red') 注意这里后面不用再写self了
People.init(self,'red')
子类也可以定义自己的方法和修改父类的方法
class Chinese(People):
def init(self):
#super(Chinese,self).init('red')
People.init(self,'red')
def talk(self): 定义子类自己的方法
print "I like talking"
def think(self): 修改父类的方法
print ...
Python支持多重继承,即一个类可以继承多个父类;
语法:
class class_name(Parent_c1, Parent_c2,…)
注意:
当父类中出现多个自定义的init方法时,多重继承只执行第一个类的init方法,其他不执行。
#!/usr/bin/python
class People(object):
color = 'Yellow'
def __init__(self,c): self.dwell = 'Earth' print c def think(self): print "My home is %s" % self.dwell print "I am %s man" % self.color
class Martian(object):
color = 'red'
def init(self):
self.dwell='Martian'
class Chinese(Martian,People): 哪个父类写在前面就用谁的方法,除非自定义方法
pass
cn = Chinese()
cn.think()
只继承一个类比较常用
- 【Python】学习笔记——-3.0、函数
- python 3.0学习笔记之二------python基础小知识
- Python学习笔记3.2-python内置函数大全
- python 3.2 html.parserde 自学笔记
- python3.0 语法笔记2(Cookie登录)
- [pythonScript][cherrypy3.2]Cherrypy 小小笔记
- Python 学习笔记 3 数据结构(3.2序列)
- Python3.2官方文件翻译--课堂笔记和异常是阶级
- 不一样的str,python 3.0 与 python 2.5 的 str 类型比较笔记
- 【Cocos2D-X 学习笔记】Cocos2D-x 3.0+VS开发环境搭建[使用Python]
- python3.2笔记(编程)
- 【Python】学习笔记——-3.2、定义函数
- python3.0 语法笔记一(urllib)
- 学习笔记_python_python编程从入门到实践3.0
- 11、TX2学习笔记--OpenCV3.2+OpenCV_contrib3.2+CUDA8.0+python3.5安装
- 不一样的str,python 3.0 与 python 2.5 的 str 类型比较笔记
- python 3.0学习笔记之一------初识python
- win7 x64环境下 python3.2 nltk3.0及相关工具包的安装
- 3.2 Python列表 赋值 ‘=’,copy() ,slice[] 学习笔记006
- 我的Python3.0笔记之容器,迭代器,生成器