一、继承
继承的语法是在方法名后加个括号,在括号中写要继承父类的名字。在Python中,object类是所有类的基类(定义一个类没有指定继承哪个类,就默认继承object类)。
#!/usr/bin/python
#coding=utf-8
#定义一个父类
class Employee(object):
def __init__(self, name):
self.__name = name
def get_name(self):
return self.__name
def set_name(self):
self.__name = name
def login(self):
print("Employee In Office")
def changeSalary(self, newSalary):
self._salary = newSalary
def get_Salary(self):
return self._salary
#定义一个子类,继承Employee类
class Manager(Employee):
def login(self):
print("Manager In Office")
print("Check the Account List")
def attendWeeklyMeeting(self):
print("Manager attend Weekly Meeting")
#使用类
manager = Manager("Nicholas")
print(manager.get_name())
manager.login()
manager.changeSalary(12580)
print(manager.get_Salary())
manager.attendWeeklyMeeting()
笔记:
1、子类Manager重写(也叫覆写或重写)了父类Employee的login方法。
2、由于Manager没有定义__init__方法,所以对象manager调用父类manager的__init__方法。
测试运行:
二、多继承
#!/usr/bin/python
#coding=utf-8
from ctypes.test.test_pickling import name
from test.test_largefile import size
#定义一个父类
class FileHandle():
def read(self, path):
print("reading file")
def write(self, path, value):
__path = path
print("write file")
class DBHandle():
def read(self, path):
print("reading DB")
def wirte(self, path, value):
__path = path
print("writing DB")
class Tool(FileHandle, DBHandle):
def businessLogic(self):
print("In Tool")
tool = Tool()
tool.read("d:\\1.c")
笔记:
1、由于父类FileHandle和DBHandle含有同名方法,子类会根据先继承哪个父类而调用它的方法。
三、通过“组合”来避免多继承
如果子类和父类之间没有从属关系,不应该使用继承,而应使用“组合”。
#!/usr/bin/python
#coding=utf-8
#定义一个父类
class FileHandle():
def read(self, path):
print("reading file")
def write(self, path, value):
__path = path
print("write file")
class DBHandle():
def read(self, path):
print("reading DB")
def wirte(self, path, value):
__path = path
print("writing DB")
class Tool():
def __init__(self, fileHandle):
self.fileHandle = fileHandle
self.dbHandle = DBHandle()
def calDataInfile(self, path):
self.fileHandle.read(path)
def calDataInDB(self, path):
self.dbHandle.read(path)
fileHandle = FileHandle()
tool = Tool(fileHandle)
tool.calDataInDB("myDB")
tool.calDataInfile("1.c")
测试运行: