3.0 类的内置方法
所谓内部类,就是在类的内部定义的类,主要目的是为了更好的抽象现实世界。
比如,汽车是一个类,汽车的地盘,轮胎也可以抽象为类,将其定义到汽车的类中,则形成内部类,更好的描述汽车类,因为底盘、轮胎是汽车的一部分
创建内部类的方法和创建类的方法很相似
内部类的实例化方法
方法1:直接使用外部类调用内部类
object_name = outclass_name.inclass_name()
class People(object):
class Chinese(object):
name = "I'm a Chinese"
me = People.Chinese()
print me.name
----------
I'm a Chinese
方法2:先对外部类进行实例化,然后再实例化内部类
out_name = outclass_name()in_name = out_name.incalss_name()in_name.method()
class People(object):
class Chinese(object):
name = "I'm a Chinese"
me = People.Chinese()
print People.Chinese.name
----------
I'm a Chinese
魔术方法
str(self)
class A(object):
def __str__(self):
return "123"
a = A()
print a \\类实例化的时候就会执行,不需要额外调用
构造函数与析构函数
构造函数
用于初始化类的内部状态,python提供的构造函数是_init_()
_init_()方法时可选的,如果不提供,python会给出一个默认的__init__方法
析构函数:
用于释放对象占用的资源,python提供的析构函数是 _del_():
_del_()也是可选的,如果不提供,则python会在后台提供默认析构函数
垃圾回收机制
python采用垃圾回收机制来清理不再使用的对象;python提供gc模块释放不再使用的对象
python采用“引用计数”的算法方式来回收,即:当某个对象在作用域内不再被其他对象引用的时候,python就自动清除对象;
gc模块的collect()可以一次性收集所有待处理的对象(gc.collect)
import gc
print gc.collect
3.1-3.2 类的继承
继承是面向对象的重要特征之一;
继承关系:继承是相对两个类而言的父子关系,子类继承了父类的所有共有属性和方法
继承实现了代码重用
继承可以重写已存在的数据和行为,减少代码的重复编写,python在类名后面使用一对括号来表示继承关系,括号中的类即为父类。
class MyClass(ParentClass):
class Parent(object):
p1 = 1
def func(self):
print "Parents"
class Child(Parent):
pass
c = Child()
c.func()
------
Patents
如果父类定义了__init__方法,子类必须显式调用父类的__init_方法:
ParentClass.__init__(self,[args...])
举例:
class Parent(object):
def __init__(self,n):
pass
def func(self):
pass
class Child(Parent):def init(self):Parent.init(self,"child")
如果子类需要扩展父类的行为,可以添加__init__方法的参数。
super函数
可以继承类的继承父类的方法和属性
class A(object):
def __init__(self):
print "A"
print "AA"
class B(object):
def __init__(self):
print "B"
super(B,self).__init__()
print "BB"
b = B()
多重继承
Python支持多重继承,一个类可以继承多个父类
class MyClass(Patent1,Parent2...)
注意,当父类中出现多个自定义的__init__方法时,多重继承只执行第一个类的__init__方法,其他的不执行