Contents
7.9. 子类继承父类后方法重写¶
子类继承父类之后可修改父类的方法,通过同名的方法,就覆盖了父类的方法
7.9.1. 用代码来理解¶
代码示例 1¶
#!/usr/bin/env python
# -*- coding:utf8 -*-
class fangfa1:
def __init__(self):
pass
def speak(self):
print("hujianli say .....")
class Fangfa2(fangfa1):
def __init__(self):
pass
def speak(self):
"""
方法重载,子类和父类有相同的方法时,子类默认会修改掉父类的方法
:return:
"""
print("xiaojian say ......")
if __name__ == '__main__':
hu = Fangfa2()
hu.speak()
代码示例 2¶
#!/usr/bin/env python
#-*- coding:utf8 -*-
'''
class ClassName(基类):
pass
'''
class Fruit:
color = '绿色' #类属性
def harvest(self,color):
print('水果是: ', color, '的!')
print('水果已经收获.....')
print('水果原来是: ', Fruit.color) #输出类属性
class Apple(Fruit):
color = '红色'
def __init__(self):
print('我是Apple...')
def harvest(self,color):
'''
方法的重写
:param color:
:return:
'''
print('苹果!')
print('苹果已经收获.....')
print('苹果原来是: ', Fruit.color) #输出类属性
class Orange(Fruit):
color = '橙色'
def __init__(self):
print('我是Orange...')
def harvest(self,color):
'''
方法的重写
:param color:
:return:
'''
print('橘子!')
print('橘子已经收获.....')
print('橘子原来是: ', Fruit.color) #输出类属性
apple = Apple()
apple.harvest(apple.color)
print()
orange = Orange()
orange.harvest(orange.color)
7.9.2. 使用未绑定的方法调用被重写的方法¶
代码示例¶
#!/usr/bin/env python
#-*- coding:utf8 -*-
# auther; 18793
# Date:2019/6/13 23:09
# filename: 使用未绑定的方法调用被重写的方法.py
class BaseClass:
def foo(self):
print("父类中定义的foo方法")
class SubClass(BaseClass):
# 重写父类的foo方法
def foo(self):
print("子类中重写父类的foo方法")
def bar(self):
print("执行bar方法")
#直接执行foo方法,将会调用子类重写之后的foo()方法
self.foo()
#使用类名调用实例方法(未绑定方法)调用父类被重写的方法
BaseClass.foo(self)
if __name__ == '__main__':
sc = SubClass()
sc.bar()
输出信息
执行bar方法
子类中重写父类的foo方法
父类中定义的foo方法
7.9.3. 使用super()函数进行修改重写父类的方法¶
代码示例 1¶
#!/usr/bin/env python
#-*- coding:utf8 -*-
class Bird(object):
def chirp(self):
print("make sound")
class Chicken(Bird):
def chirp(self):
super(Chicken, self).chirp()
print("ji")
if __name__ == '__main__':
print("第一次实例化".center(100, "="))
bird = Bird()
bird.chirp()
print("第二次实例化".center(100, "="))
summer = Chicken() #调用被覆盖的方法
summer.chirp()
__metaclass__ = type
class Person:
def __init__(self):
self.height = 160
def about(self,name):
print("{} is about {}".format(name,self.height))
class Girl(Person):
def __init__(self):
self.breast = 90
# Person.__init__(self)
super(Girl, self).__init__() #继承父类的构造方法
def about(self,name):
print("{} is a hot girl ,she is about {} height is {}".format(name, self.height, self.breast))
super(Girl, self).about(name) #继承父类的方法
if __name__ == '__main__':
hu = Girl()
hu.about("wangxiaomei")
7.9.4. 使用super函数调用父类的构造方法¶
#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/6/13 23:17
# filename: 使用super函数调用父类的构造方法.py
class Employee:
def __init__(self, salary):
"""
父类构造方法
:param salary:员工工资
"""
self.salary = salary
def work(self):
print("我是胡建力,我的工资是:【{}】".format(self.salary))
class Customer:
def __init__(self, favorite, address):
self.favorite = favorite
self.address = address
def info(self):
print("我是一名顾客,我的职业是:【{}】,我的地址是:【{}】".format(self.favorite, self.address))
class Manager(Employee, Customer):
# 重写父类的构造方法
def __init__(self, salary, favorite, address):
print("-------- Manager的构造方法 ------------")
# super().__init__(salary)
super(Manager, self).__init__(salary)
Customer.__init__(self, favorite, address)
if __name__ == '__main__':
# 创建Manager对象
m = Manager(25000, "IT产品", "北京")
m.work()
m.info()
输出信息
-------- Manager的构造方法 ------------
我是胡建力,我的工资是:【25000】
我是一名顾客,我的职业是:【IT产品】,我的地址是:【北京】
7.9.5. 类中的私有方法¶
class Private(object):
def __init__(self):
pass
def __foo(self):
print("@@@@这是一个私有的方法@@@@@.")
def get_foo(self):
print("首先,我是一个公有的方法")
print("开始调用私有方法")
self.__foo()
print("公有方法和私有方法结束")
if __name__ == '__main__':
hu = Private()
print("开始调用公有方法:")
hu.get_foo()
print("开始调用私有方法:")
print("查看类中的所有方法:")
print(dir(hu))
hu._Private__foo()