Python面向对象继承

Python面向对象继承

面向对象继承

面向对象编程 (OOP),英语全称:Object Oriented Programming,面向对象编程的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

继承,其实这样理解,就是我写了一个爸爸类和儿子类,爸爸有钱,儿子却没钱,于是儿子决定继承爸爸,调用爸爸的钱(爸爸类的变量和方法)。

继承一个类,基本使用下面的五个方法。

(1)直接调用父类属性方法;

爸爸有钱,儿子却没钱,于是儿子用爸爸的钱

<code>class Father():
def __init__(self):
self.money= 1000
def action(self):
print('调用父类的方法')

class Son(Father):
pass

son=Son() # 子类Son 继承父类Father的所有属性和方法
son.action() # 调用父类属性
输出:调用父类的方法

son.money # 调用父类属性
输出:1000
/<code>

(2)强制调用父类私有属性方法;

爸爸说,你这个儿子,老是用我的钱,我决定藏私房钱。儿子试试super()拿你的私房钱,但是这里需要注意super()强制调用父类私有属性方法,就是重写方法,私有变量是不能用supper继承不了,还不可以访问父类中的私有属性方法的变量,就是儿子是拿不了私房钱的。

<code>class Father():
__money = 1000 #私有变量是继承不了

def __action(self): # 父类的私有方法
money = 1000
print('调用父类的方法')

class Son(Father):

def action(self):
super()._Father__action()
print(money)

son=Son()
son.action()

调用父类的方法
name 'money' is not defined
/<code>

(3):重写父类属性方法;

突然间儿子竟然有钱,决定不用爸爸的钱,用自己的钱,决定重写父类属性方法。

<code>class Father():
def __init__(self):
self.money = 0

def action(self):
print('调用父类的方法')

class Son(Father):
def __init__(self):
self.money = 1000

def action(self):
print('子类重写父类的方法')

son=Son() # 子类Son继承父类Father的所有属性和方法
son.action() # 子类Son调用自身的action方法而不是父类的action方法
son.money # 自己的1000
/<code>

(4) 调用父类的__init__方法

如果爸爸把钱放在__init__,儿子有没有可能拿到爸爸的钱,都不是私有变量,就不是私房钱,当然可以拿到

我们先看看如果不用super,能不能拿到。

<code>class Father():
def __init__(self):
self.money = 1000

class Son(Father):
def __init__(self):
pass

son=Son()
print(son.money)

# 报错:'Son' object has no attribute 'money'


/<code>

连super不用就像拿钱,太小看你爸爸我了。

<code>class Father():
def __init__(self):
self.money = 1000

class Son(Father):
def __init__(self):
super().__init__()
#也可以用 Father.__init__(self) 这里面的self一定要加上(上面两个相同)


son=Son()
print(son.money)

1000
/<code>

(5):继承父类初始化过程中的参数

有的时候,爸爸需要挣钱和花钱,就是我们初始化过程中的参数,儿子很好奇,决定看看爸爸口袋还要多少钱。

我们这里先写死了earn_money和spend_money

<code>class Father():
def __init__(self):
self.earn_money=1000
self.spend_money= -500

class Son(Father):
def __init__(self):
super().__init__()
#也可以用 Father.__init__(self) 这里面的self一定要加上

def add(self):

return self.earn_money+self.spend_money


son=Son()
print(son.add())

500
/<code>

儿子发现爸爸钱不够,于是偷偷的拿了点钱过来。

<code>class Father():
def __init__(self,a,b):
self.earn_money = a
self.spend_money= b
def add(self):
return self.a + self.b

#调用父类初始化参数a,b并增加额外参数c
class Son(Father):
def __init__(self,a,b,c=1000): # c固定值
Father.__init__(self,a,b)
self.son_money = c

def add(self):
return self.earn_money+self.spend_money + self.son_money



son=Son(1000,-500) # 所以c可以不用显示表达出来
print(son.add()) # 调用子类add函数

1500
/<code>

以上基本涵盖了Python类的继承,调用父类的属性和方法基础内容,可以自己动手写些案例,加深理解。


分享到:


相關文章: