您的位置:首页 > 编程语言 > Python开发

2018.12.5python笔记(3.0-3.2)

2018-12-06 07:44 176 查看

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 笔记