1.⾯向对象的三⼤特征是:_______________、_______________、__________________。
2.代码补⻬:
class Dog:
def bark(self):
print("要不死你就是我⼤爷")
td = Dog("泰迪",5)
print(td.name)
td.set_age(3)
print(td) #输出:我是泰迪,今年3岁
td.bark()
3.代码改错,并说明原因
class Cat:
def __init__(self,name,age,kind='猫'):
self.name = name
self.__age = age
self.kind = kind
@property
def age(self):
return self.__age
def miao():
print("喵喵")
#以下代码不能修改
bsm = Cat('加菲猫',5)
print(bsm.name,bsm.age)
bsm.name = '⼤肥猫'
bsm.age = 6
bsm.miao()
4.以下代码输出什么
class Person:
def __new__(cls, *args, **kwargs):
print("new")
return object.__new__(cls, *args, **kwargs)
def __init__(self):
print("构造")
def __del__(self):
print("del")
Person()
5.代码改正:
class Dog(object):
def __init__(self, name):
self.name = name
@property
def eat(self):
print(" %s is eating" %self.name)
d = Dog("ChenRonghua")
d.eat()
6.代码补⻬
class Base:
def __init__(self,a,b):
self.a = a
self.__b = b
def test(self):
print("Base:A")
class A(Base):
def __init__(self,a,b,c):
__________________
self.c = c
def test(self):
__________
def demo(self):
__________
a = A(1,2,3)
a.test() #输出:Base:A
a.demo().test()
7.魔术⽅法new和init的区别是什么?
8.类⽅法和静态⽅法的区别和联系是什么?
9.谈谈你对封装、继承和多态的理解。
答案:
1.封装、继承、多态
2.补齐后的代码如下,
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
print("要不死你就是我⼤爷")
def set_age(self, age):
self.age = age
def __str__(self):
return f"我是{self.name},今年{self.age}岁"
3.代码如下,
class Cat:
def __init__(self, name, age, kind='猫'):
self.name = name
self.__age = age
self.kind = kind
@property
def age(self):
return self.__age
# 由于要修改__age的属性值,需要运用属性装饰器,修改如下:
@age.setter
def age(self, age):
self.__age = age
def miao(): # 缺少self参数,应该为def miao(self):
print("喵喵")
# 以下代码不能修改
bsm = Cat('加菲猫', 5)
print(bsm.name, bsm.age)
bsm.name = '⼤肥猫'
bsm.age = 6
bsm.miao()
4.输出为:
new
构造
del
5.修正后的代码如下,
class Dog(object):
def __init__(self, name):
self.name = name
# 因为name属性不是私有属性,无需使用属性装饰器
def eat(self):
print(" %s is eating" %self.name)
d = Dog("ChenRonghua")
d.eat()
6.补齐后的代码如下,
class Base:
def __init__(self, a, b):
self.a = a
self.__b = b
def test(self):
print("Base:A")
class A(Base):
def __init__(self, a, b, c):
super().__init__(a, b)
self.c = c
def test(self):
super().test()
def demo(self):
return self
7.参考答案:
__ new__⽤于创建⼀个对象,有返回值,而__ init__⽤于初始化对象,没有返回值。
__new__默认参数是cls,系统传递的是类名,而__init__默认参数是self,系统传递的是当前对象。
8.参考答案:
类⽅法第⼀个参数是类对象,由系统传⼊。静态⽅法可以没有参数。
9.参考答案:
封装就是无法修改其内部的代码,只提供一些公用的接口,供用户使用。
继承是一种简化代码的方式,将具有同样或类似功能的类进行调用的一种方式。
多态指的是一类事物有多种形态。