Python基础教程(十一) Python的面向对象编程之继承与组合-张柏沛IT博客

正文内容

Python基础教程(十一) Python的面向对象编程之继承与组合

栏目:Python 发布时间:2019-10-30 17:21 浏览量:150

类的继承

一个类如果继承了另一个类,那么子类可以拥有父类的方法和属性

格式为:

class 子类名(父类名):

        xxxxx

 

比如一个类继承list这个类

class Mylist(list):
    pass
	
#pass表示这个类什么都不干,相当于一个空代码块

list1=Mylist((14,3,6,1,7))
list1.sort()

这么一来Mylist类也有list的方法了

 

如何调用父类的方法:

a. 父类类名.方法名(self,p1,p2,p3,...)  这里面的self就是子类的实例对象而非父类的实例对象了

b. super().方法名(p1,p2,...)  而且不用传self

而且python支持多继承

class 子类(父类1,父类2,父类3...):

 

但是要尽量避免多继承。

 

class WaterAnimal:
    num=0    #表示初始化多少只水生动物
    
	def __init__(self,num):
	    self.num=num
		
		
class Turtle(waterAnimal):
    pass
	
class Fish(waterAnimal):
    pass	
	
class Pool:
    fish=None
	turtle=None 
	
    def __init__(self,x,y):
	    self.fish=Fish(x)
		self.turtle=Turtle(y)
		
	def info(self):
	    print("水中有%s只乌龟和%s只鱼" % (self.fish.num,self.turtle.num))
		
pool=Pool(5,10)		
pool.info()

像这种将一个对象作为属性存在另一个对象中的做法就叫做组合

 

继承是纵向关系

组合是横向关系

 

 

类对象

所谓的类对象,就是不实例化类,而直接使用类来调用方法和属性

class Demo:
    count=0
	
	def addCount(self):
	    self.count++
		
a=Demo()
b=Demo()
c=Demo()

c.count=10
Demo.count=100    #这里直接使用类来调用修改属性

 

此时a.countb.count都是100,但是c.count还是10

从上面例子可以看出,定义出来的属性既可以让对象调用,也可以用类调用

 

用类修改属性时不会改变用对象修改的属性值,但是对象未修改过属性值则会改变所有对象的属性值

所以用类来修改属性值相当于一种初始化的作用

 

 

但是,如果使用过类调用addCount方法则要传入对象作为参数

C.addCount(a)

此时acount属性加1,其他对象的不变

 

 

还有 属性名不能和方法名重复,否则会属性会覆盖掉方法。这样这个方法就不存在了

你再去调用这个方法的时候就会报错

因此要遵循属性用名词命名,方法用动词命名

 

 

和类相关的函数

issubclass(1,类2)    #判断类1是否是类2的子类,第二参如果放入元组,里面放入多个类,那么只要有一个类是类1的父类都算true

例如:

class A :
    pass 
	
class B(A) :
    pass 
	
issubclass(B,A)  #返回True
issubclass(B,B)  #返回True
issubclass(B,object) #返回True,object是所有类的基类

 

isinstance(对象,类) #判断对象是否是类的实例化对象,如果第一参不是个对象而是个类,就会返回false

isinstance(b,B)  #True
isinstance(b,A)  #True

 

hasattr(对像,属性)  #判断一个对象是否有某属性,第二参要加引号哦

getattr(对象,属性[,默认值]) #访问某个属性,不存在就可以赋值个默认值

setattr(对象,属性名,)    #在类之外添加或者修改属性值

delattr(对象,属性名)  #干掉一个属性,不存在则报错

 

重写:

如果你想重写一个类,重写里面的一个或者几个方法

你可以定义一个类,类名和你要重写的那个类同类名

然后让这个类继承自己:这么一来,你只要重写你要重写的方法,其他方法统统继承不变

class A(A):

    .....

如果您需要转载,可以点击下方按钮可以进行复制粘贴;本站博客文章为原创,请转载时注明以下信息

张柏沛IT技术博客 > Python基础教程(十一) Python的面向对象编程之继承与组合

热门推荐
推荐新闻