运维开发网

2018.12.5python笔记(3.0-3.2)

运维开发网 https://www.qedev.com 2020-03-11 15:42 出处:51CTO 作者:wuyinchen
3.0类的内置方法Python内部类(类的嵌套)所谓内部类,就是在类的内部定义的类,主要目的是为了更好的抽象现实世界。例子:汽车是个类,汽车的底盘,轮胎也可以抽象为类,将其定义到汽车类中,则形成内部类,更好的描述汽车类,因为底盘、轮胎是汽车的一部分。比如os.path.path就是os中的内部类创建内部类#!/usr/bin/pythonclassPeople(object):color=&#39

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()

只继承一个类比较常用

0

精彩评论

暂无评论...
验证码 换一张
取 消