2.练习题2
封装 继承 多态
要求:
如何理解多继承?
答:所谓多继承,即子类有多个父类,并且具有它们的特征.
写出一个简单的多继承案例.
#定义一个父类
class language:
def printlanguage(self):
print('---language---')
#定义一个父类
class C++:
def printC++(self):
print('---C++---')
#定义一个子类,继承两个父类
class python(language,C++):
def printpython(self):
print('---python---')
如果多个父类中有相同的方法,那么子类在调用的时候,挑用哪个?
答:先继承谁,就调用谁的函数.
如何理解重写?
答:所谓重写,就是子类中,有一个和父类相同名字的方法,在子类中的方法会覆盖掉父类中同名的方法
下面有一个类,请重写类中的方法
#coding=utf-8
class Car(self):
def run(self):
print("奔驰在路上!")
参考代码:
class BMW(Car):
def run(self):
print("奔驰在田野上!")
你是如何理解多态的?
答:一种类型,多种形态.
请解读出多态一章中python"鸭子类型"程序的运行结果.
答: S1.show
None
S2.show
None
3.练习题3
类属性 实例属性 类方法及静态方法
要求:
简述你自己对类属性的理解?
答:类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有.
请写出一个简单的类,其中包含公有属性,私有属性.
class Car(obj):
name = "benci"
__money = 50000
请判断下面类中哪些是类属性,哪些是实例属性?
class Car(obj):
addr = "china"
def __init__(self):
self.name = 'changcheng'
self.money = 100000
参考
class Car(obj):
addr = "china" #类属性
def __init__(self):
self.name = 'changcheng'#实例属性
self.money = 100000#实例属性
如果要在类外修改类属性该怎么做?
答:必须通过类对象去引用然后进行修改.
实例属性修改的方式是什么?
答:通过实例对象去引用,并会产生一个同名的实例属性.
简述你对类方法的理解?
答:类方法是类对象所拥有的方法,需要用修饰器@classmethod来标识其为类方法.
对于类方法的参数有什么要求吗?
答:对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数.
类方法可以通过哪几种方式引用?
答:可以通过实例对象,类对象来引用.
类方法的用途?
答:可以对类属性进行修改.
如何使用静态方法?
答:静态方法需要通过修饰器@staticmethod来进行修饰,不需要多定义参数.
如何在静态方法中引用类属性?
答:必须通过类对象来引用.
提示:
类方法的第一个参数是类对象cls.
实例方法的第一个参数是实例对象self.
4.练习题4
利用继承编写下面一段代码
要求:
动物:吃,喝,跑,玩
猫:喵喵叫
狗:旺旺叫
猫狗继承于动物,并且有2.3中自己的属性.
class Animal:
def eat(self):
print("--%seat"%self.name)
def drink(self):
print(" %sdrink"%self.name)
def run(self):
print("%s running"%self.name)
def play(self):
print("%s playing"%self.name)
class Cat(Animal):
def __init__(self, name):
self.name = name
def cry(self):
print("喵喵叫")
class Dog(Animal):
def __init__(self, name):
self.name = name
def cry(self):
print("旺旺叫")
cat1 = cat('大黄猫')
cat1.eat()
cat2 = cat('花猫')
cat2.drink()
dog1 = Dog('八公')
dog1.eat()
class Animal:
def eat(self):
print("--%seat"%self.name)
def drink(self):
print(" %sdrink"%self.name)
def run(self):
print("%s running"%self.name)
def play(self):
print("%s playing"%self.name)
class Cat(Animal):
def __init__(self, name):
self.name = name
def cry(self):
print("喵喵叫")
class Dog(Animal):
def __init__(self, name):
self.name = name
def cry(self):
print("旺旺叫")
cat1 = cat('大黄猫')
cat1.eat()
cat2 = cat('花猫')
cat2.drink()
dog1 = Dog('八公')
dog1.eat()