Python内部类:
所谓内部类,就是在类的内部定义的类,主要目的是为了更好的抽象现实世界。
例子:
汽车是一个类,汽车的底盘轮胎也可以抽象为类,将其定义到汽车内中,而形成内部类,
更好的描述汽车类,因为底盘轮胎是汽车的一部分。
内部类实例化方法:
方法1:直接使用外部类调用内部类
方法2:先对外部类进行实例化,然后再实例化内部类
out_name = outclass_name()in_name = out_name.inclass_name()in_name.method()#!/usr/bin/env python#-*- Coding:utf-8 -*-class People(object): color = ‘yellow‘ __age = 30 #私有属性 class Chinese(object): print("I am chinese") def think(self): self.color = "black" print "I am a %s " % self.color print ("I am a thinker") print self.__age def __talk(self): print "I am talking with Tom" @classmethod #调用类的方法 def test(self): print ("this is class method") @staticmethod #调用类的方法 def test1(): print ("this is static method")jack = People.Chinese()#!/usr/bin/env python#-*- Coding:utf-8 -*-class People(object): color = ‘yellow‘ __age = 30 #私有属性 class Chinese(object): name ="I am a Chinese." def think(self): self.color = "black" print "I am a %s " % self.color print ("I am a thinker") print self.__age def __talk(self): print "I am talking with Tom" @classmethod #调用类的方法 def test(self): print ("this is class method") @staticmethod #调用类的方法 def test1(): print ("this is static method")jack = People.Chinese() #外部类调用内部类print jack.name #外部类调用内部类对象另一种方法,外部类调用内部类对象#!/usr/bin/env python#-*- Coding:utf-8 -*-class People(object): color = ‘yellow‘ __age = 30 #私有属性 class Chinese(object): name ="I am a Chinese." def think(self): self.color = "black" print "I am a %s " % self.color print ("I am a thinker") print self.__age def __talk(self): print "I am talking with Tom" @classmethod #调用类的方法 def test(self): print ("this is class method") @staticmethod #调用类的方法 def test1(): print ("this is static method")ren = People() #实例化外部类jack = ren.Chinese() #实例化内部类print jack.name #打印内部类属性或print People.Chinese.nameprint People.Chinese().name魔术方法:
str(self)
构造函数与析构函数
构造函数:
用于初始化类的内部状态,Python提供的构造函数是__init__():__init__():方法是可选的,如果不提供,python会给出一个默认的__init__方法。
析构函数:
用于释放对象占用的资源,python提供的析构函数是__del__():__del__():也是可选的,如果不提供,则python会在后台提供默认析构函数。
构造函数str
#!/usr/bin/env python#-*- Coding:utf-8 -*-class People(object): color = ‘yellow‘ __age = 30 #私有属性 class Chinese(object): name ="I am a Chinese." def __str__(self): return "This is People class" def think(self): self.color = "black" print "I am a %s " % self.color print ("I am a thinker") print self.__age def __talk(self): print "I am talking with Tom" @classmethod #调用类的方法 def test(self): print ("this is class method") @staticmethod #调用类的方法 def test1(): print ("this is static method")ren = People() #实例化外部类print ren #默认执行__str____init__(self)初始化类:#!/usr/bin/env python#-*- Coding:utf-8 -*-class People(object): color = ‘yellow‘ __age = 30 #私有属性 class Chinese(object): name ="I am a Chinese." def __str__(self): return "This is People class" def __init__(self,c=‘white‘): #类实例化时自动执行 self.color = c self.think() def think(self): self.color = "black" print "I am a %s " % self.color print ("I am a thinker") print self.__age def __talk(self): print "I am talking with Tom" @classmethod #调用类的方法 def test(self): print ("this is class method") @staticmethod #调用类的方法 def test1(): print ("this is static method")jack = People(‘green‘)ren = People() #实例化外部类print ren.color #通过对象访问属性是初始化后的值print People.color #通过类访问还是原来的值 [[email protected] 20180110]# python test1.py I am a black I am a thinker30blackyellow析构函数__del__():释放资源#!/usr/bin/env python#-*- Coding:utf-8 -*-class People(object): color = ‘yellow‘ __age = 30 #私有属性 class Chinese(object): name ="I am a Chinese." def __str__(self): return "This is People class" def __init__(self,c=‘white‘): #类实例化时自动执行 print ("initing...") self.color = c self.think() f = open(‘test.py‘) def think(self): self.color = "black" print "I am a %s " % self.color print ("I am a thinker") print self.__age def __talk(self): print "I am talking with Tom" @classmethod #调用类的方法 def test(self): print ("this is class method") @staticmethod #调用类的方法 def test1(): print ("this is static method") def __del__(self): print ("del....") self.f.close()jack = People(‘green‘)ren = People() #实例化外部类print ren.color #通过对象访问属性是初始化后的值print People.color #通过类访问还是原来的值垃圾回收机制:
Python采用垃圾回收机制来清理不再使用的对象;python提供gc模块释放不再使用的对象。
Python采用“引用计数”的算法方式来处理回收,即:当然某个对象在其作用域内不再被其
他对象引用的时候,python就自动化清除对象。
gc模块collect()可以一次性收集所有待处理的对象(gc.collect)
#!/usr/bin/env python#-*- Coding:utf-8 -*-class People(object): color = ‘yellow‘ __age = 30 #私有属性 class Chinese(object): name ="I am a Chinese." def __str__(self): return "This is People class" def __init__(self,c=‘white‘): #类实例化时自动执行 print ("initing...") self.color = c self.think() f = open(‘test.py‘) def think(self): self.color = "black" print "I am a %s " % self.color print ("I am a thinker") print self.__age def __talk(self): print "I am talking with Tom" @classmethod #调用类的方法 def test(self): print ("this is class method") @staticmethod #调用类的方法 def test1(): print ("this is static method") def __del__(self): print ("del....") self.f.close()print gc.collect() 如果是0是没有回收的。jack = People(‘green‘)ren = People() #实例化外部类print ren.color #通过对象访问属性是初始化后的值print People.color #通过类访问还是原来的值2.类的继承
类的继承
继承是面向对象的重要特性之一,继承关系继承是相对两个类而言的父子关系子类继承了父类的所有公有属性和方法,继承,实现了代码重用
使用继承
继承可以重用已经存在的数据和行为,减少代码的重复编写,Python在类名后使用一对括号来表示继承关系,括号中的即类为父类class Myclass(ParentClass),如果父类定义了__init__方法,子类必须显式调用父类的__init__方法,ParentClass.__init__(self,[args...])如果子类需要扩展父类的行为,可以添加__init__方法的参数.
#!/usr/bin/env python#-*- Coding:utf-8 -*-class People(object): color = ‘yellow‘ def think(self): self.color = "black" print "I am a %s " % self.color print ("I am a thinker")class Chinese(People): passcn = Chinese()print cn.colorcn.think()父类中有构造函数:#!/usr/bin/env python#-*- Coding:utf-8 -*-class People(object): color = ‘yellow‘ def __init__(self): print "Init..." self.DWell = ‘Earth‘ def think(self): print "I am a %s " % self.color print ("I am a thinker")class Chinese(People): passcn = Chinese()print cn.DWellcn.think()参数大于两个:Super 函数#!/usr/bin/env python#-*- Coding:utf-8 -*-class People(object): color = ‘yellow‘ def __init__(self,c): print "Init..." self.DWell = ‘Earth‘ def think(self): print "I am a %s " % self.color print ("I am a thinker")class Chinese(People): def __init__(self): People.__init__(self,‘red‘) passcn = Chinese()class A(object): def __init__(self): print "enter A" print "leave A"class B(object): def __init__(self): print "enter B" super(B,self),__init__() print "leave B"b = B()#!/usr/bin/env python#-*- Coding:utf-8 -*-class People(object): color = ‘yellow‘ def __init__(self,c): print "Init..." self.DWell = ‘Earth‘ def think(self): print "I am a %s " % self.color print ("I am a thinker")class Chinese(People): def __init__(self): super(Chinese,self).__init__(‘red‘) passcn = Chinese()cn.think()#!/usr/bin/env python#-*- Coding:utf-8 -*-class People(object): color = ‘yellow‘ def __init__(self,c): print "Init..." self.DWell = ‘Earth‘ def think(self): print "I am a %s " % self.color print ("I am a thinker")class Chinese(People): def __init__(self): super(Chinese,self).__init__(‘red‘) def talk(self): print "I like taking."cn = Chinese()cn.think()cn.talk()
多重继承
Python支持多重继承,第一个类可以继承多个父类语法:class class_name(Parent_c1,Parent_c2,...)注意:当父类中出现多个自定义的__init__的方法时,多重继承,只执行第一个累的__init_方法,其他不执行。
#!/usr/bin/env python#-*- Coding:utf-8 -*-class People(object): color = ‘yellow‘ def __init__(self): print "Init..." self.DWell = ‘Earth‘ def think(self): print "I am a %s " % self.color print ("My home is %s ") % self.DWellclass Martian(object): color = ‘red‘ def __init__(self): self.DWell = ‘Martian‘class Chinese(People,Martian): def __init__(self): People.__init__(self)cn = Chinese()cn.think()#!/usr/bin/env python#-*- Coding:utf-8 -*-class People(object): def __init__(self): self.DWell = ‘Earth‘ self.color = ‘yellow‘ def think(self): print "I am a %s " % self.color print ("My home is %s ") % self.DWellclass Martian(object): color = ‘red‘ def __init__(self): self.DWell = ‘Martian‘ def talk(self): print "I like talking"class Chinese(Martian,People): def __init__(self): People.__init__(self)cn = Chinese()cn.think()cn.talk()@H_404_0@ 总结
以上是内存溢出为你收集整理的Python中类的内置方法与继承关系实例全部内容,希望文章能够帮你解决Python中类的内置方法与继承关系实例所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)