4.5 课后习题
(1)类和对象的关系即数据类型与变量的关系,类规定了可以用于存储什么数据,而对象用于实际存储数据,每个对象可存储不同的数据

(2)类中包含属性和方法。属性对应一个类可用来保存哪些数据,而方法对应一个类可以支持哪些操作(即数据处理)

(3)私有属性,是指在类内可以直接访问,而在类外无法直接访问的属性

(4)构造方法是Python类中的内置方法之一,它的方法名为_init_,在创建一个类对象时会自动执行,负责完成新创建对象的初始化工作

(5)析构方法是类的另一个内置方法,它的方法名为_del_,在销毁一个类对象时会自动执行,负责完成待销毁对象的资源清理工作,如关闭文件等

(6)_str_方法的返回值必须是字符串

(7)通过继承,可以基于已有类创建新的类,新类除了继承已有类的所有属性和方法,还可以根据需要增加新的属性和方法

(8)通过多态,可以使得在执行同一条语句时,能够根据实际使用的对象类型决定调用哪个方法

(9)如果一个类C1通过继承已有类C而创建,则将C1称作子类,将C称作基类、父类或超类

(10)如果一个子类只有—个父类,则将这种继承关系称为单继承;如果一个子类有两个或更多父类,则将这种继承关系称为多重继承

(11)方法重写是指子类可以对从父类中继承过来的方法进行重新定义,从而使得子类对象可以表现出与父类对象不同的行为

(12)内置函数isinstance用于判断一个对象所属的类是否是指定类或指定类的子类

(13)内置函数issubclass用于判断一个类是否是另一个类的子类

(14)内置函数type用于获取一个对象所属的类

(15)Python提供了_slots_变量以限制可动态扩展的属性

(16)Python提供了@property装饰器,可以将类中属性的访问和赋值操作自动转为方法调用,这样可以在方法中对属性值的取值范围做一些条件限定

(17)直接使用@property 可以定义一个用于获取属性值的方法(即getter)。如果需要对属性score定义一个设置属性值的方法(setter),需要用到的装饰器为@属性名.setter

(18)元类可以看成创建类时所使用的模板,也可以理解为用于创建类的类

(19)单例模式是指在程序运行时确保某个类最多只有一个实例对象

(20)在执行_init_前,还会执行类的一个内置的类方法_new_,其作用是创建对象并返回

(21)关于类和对象说法正确的是(A)

A.根据一个类可以创建多个对象,而每个对象只能是某一个类的对象

B.根据一个类只能创建一个对象,而每个对象只能是某一个类的对象

C.根据一个类可以创建多个对象,而每个对象可以属于多个类

D.根据一个类只能创建一个对象,而每个对象可以属于多个类

(22)下列关于构造方法的说法错误的是(C)

A.构造方法是 Python类中的内置方法之一,在创建一个类对象时会自动执行,负责完成新创建对象的初始化工作

B.构造方法中,除了self,也可以设置其他参数

C.构造方法的参数只能是self

D.构造方法也可以设置默认参数

(23)进行self>=other运算时自动执行的内置方法是(C)

A._gt_ (self,other)        B._It_(self,other)         C. _ge_ (self,other)           D. _le_(self,other)

(24)关于super 方法的说法错误的是(D)

A.super 方法用于获取父类的代理对象以执行已在子类中被重写的父类方法

B. super方法有两个参数,第一个参数是要获取父类代理对象的类名

C.在一个类A的定义中调用super方法时,可以将两个参数都省略,此时,super()等价于super(A, self)

D.第二个参数必须传入对象名,该对象所属的类必须是第一个参数指定的类或该类的子类,找到的父类对象的self 会绑定到这个对象上

(25)关于类方法的说法错误的是(D)

A.类方法是指使用@classmethod修饰的方法

B.类方法的第一个参数是类本身(而不是类的的实例对象)

C.类方法既可以通过类名直接调用,也可以通过类的实例对象调用

D.类方法只能通过类名直接调用

(26)关于静态方法的说法错误的是(B)

A.静态方法是指使用 @staticmethod 修饰的方法

B.静态方法的第一个参数是类本身(而不是类的实例对象)

C.静态方法既可以通过类名直接调用,也可以通过类的实例对象调用

D.静态方法中没有类方法中的第一个类参数

(27)已知 Complex类的类方法add(cls,c1,c2)实现两个复数的相加运算,程序可以使用不同的方式调用该方法,下面错误的调用方式是(C)

A.c3=Complex.add(c1,c2)                          B..c3=c1.add(c1,c2)

C.c3.add(Complex,c1,c2)                             D.c3=Complex().add(c1,c2)

(28)关于动杰扩展类的说法正确的是(A)

A. Python除了可以在定义类时定义属性和方法外,还可以动态地为已经创建的对象绑定新的属性和方法

B.Python 只能在定义类时定义属性和方法,不能动态扩展

C.Python只能动态扩展属性,不能动态扩展方法

D.Python只能动态扩展方法,不能动态扩展属性

(29)写出下面程序的输出结果

class Student:
    name='Unknown'
    age=0
if __name__=='__main__':
    print('姓名:',Student.name)
    print('年龄:',Student.age)
    stu=Student()
    print('stu姓名:%s,年龄:%d'%(stu.name,stu.age))
    Student.name='张三'
    Student.age=18
    print('stu姓名:%s,年龄:%d'%(stu.name,stu.age))
    stu.name='李四'
    stu.age=19
    print('stu姓名:%s,年龄:%d'%(stu.name,stu.age))
    Student.name='张三'
    Student.age=18
    print('stu姓名:%s,年龄:%d'%(stu.name,stu.age))
 
 
#输出结果
姓名: Unknown
年龄: 0
stu姓名:Unknown,年龄:0
stu姓名:张三,年龄:18
stu姓名:李四,年龄:19
stu姓名:李四,年龄:19
(30)写出下面程序的输出结果

class Person:
    def __init__(self,name):
        self.name=name
    def Display(self):
        print(self.name)
class Student(Person):
    def __init__(self,sno,name):
        super().__init__(name)
        self.sno=sno
    def Display(self):
        super(Student,self).Display()
        print(self.sno)
if __name__=='__main__':
    per=Person("张三")
    per.Display()
    stu=Student(78,"李四")
    stu.Display()
 
 
#输出结果
 
张三
李四
78
(31)写出下面程序的输出结果

class Person:
    pass
class Student(Person):
    pass
if __name__=='__main__':
    per=Person()
    stu=Student()
    print("stu所属类是Person类的子类",isinstance(stu,Person))
    print("student所属类是Person类的子类",issubclass(Student,Person))
    print("per所属类是Student类的子类",isinstance(per,Student))
    print("Person类是Student类的子类",issubclass(Person,Student))
    print('stu对象所属的类:',type(stu))
    print('per所属的类:',type(per))
 
 
#输出结果
stu所属类是Person类的子类 True
student所属类是Person类的子类 True
per所属类是Student类的子类 False
Person类是Student类的子类 False
stu对象所属的类: <class '__main__.Student'>
per所属的类: <class '__main__.Person'>
(32)写出下面程序的输出结果

class Cylinder:
    Radius=5
    Height=10
    def Display(self):
        print("圆柱体半径为",self.Radius)
class Circle:
    Radius=50
    def Display(self):
        print("圆半径为",self.Radius)
if __name__=='__main__':
    c1=Cylinder()
    c2=Circle()
    c1.Display()
    c2.Display()
 
 
#输出结果
圆柱体半径为 5
圆半径为 50
(33)下面程序对圆柱体类Cylinder实现动态绑定方法,请将程序填写完整

from types import MethodType  #从types模块导入MethodType方
class Cylinder:
    pass
def SetRadius(self,r):
    self.Radius=r
def SetHeight(self,h):
    self.Height=h
if __name__=='__main__':
    c1=Cylinder()
    c2=Cylinder()
    c1.SetRadius=MethodType(SetRadius,c1)
    Cylinder.SetHeight=SetHeight
    c1.SetRadius(10)
    c2.SetRadius(20)   #c2对象未绑定SetRadius方法,此语句有误
    c1.SetHeight(30)
    c2.SetHeight(40)
(34)定义Circle类,要求:包括私有属性_radius,构造函数为半径赋值,构造函数的默认参数值为0,析构函数输出适当信息,普通方法SetRadius用于设置半径,普通方法Area返回圆面积,内置方法_str_用于输出圆面积,内置方法_gt_用于比较两个圆面积大小,并创建两个实例分别验证上述功能

PI=3.14 
class Circle:
    __radius=0
    def __init__(self, r=0):
        self.__radius=r
    def SetRadius(self,r):
        self.__radius=r;
    def __str__(self):
        return '面积:'+str(self.__radius*PI*PI)
    def __del__(self):
        print('半径为',self.__radius,"的圆被销毁")
    def Area(self):
        return self.__radius*self.__radius*PI
    def __gt__(self,other):
        return self.Area()>other.Area()
if __name__=='__main__':
    c1=Circle()
    c2=Circle(10)
    c1.SetRadius(5)
    print(c1)
    print(c2)
    if(c1>c2):
        print("1>2")
    else:
        print("1<=2")
    del c1
    del c2

《Python语言程序设计》王恺 王志 机械工业出版社 第四章 面向对象 课后习题答案相关推荐

  1. 《Python语言程序设计》王恺 王志 机械工业出版社 第三章 函数 课后习题答案

    3.7 课后习题 (1)在Python语言中,使用函数分为两个步骤:定义函数和调用函数 (2)在Python语言中,函数定义需要使用def关键字 (3)形参是在定义函数时函数后面的一对小括号中给出的参 ...

  2. 《Python语言程序设计》王恺 王志 李涛 机械工业出版社 第4章 面向对象 课后习题答案【强烈推荐】

    点个

  3. 《Python语言程序设计》王恺 王志 李涛 机械工业出版社 第3章 函数 课后习题答案【强烈推荐】

    点个

  4. 《Python语言程序设计》王恺 王志 李涛 机械工业出版社 第6章 字符串 课后习题答案【强烈推荐】

    点个

  5. C语言程序设计第五版谭浩强著 第五章部分课后习题答案

    #include<stdio.h> main() {int x,y,m,n,u,p;scanf("%d%d",&x,&y);m=x;n=y;while( ...

  6. C语言程序设计第五版谭浩强著 第七章部分课后习题答案

    #include<stdio.h> int gcd(int x,int y) {int z;for(;;){z=x%y;x=y;y=z;if(y==0)break;}return x; } ...

  7. 《Python语言程序设计》王恺 机械工业出版社 第四章课后习题答案

    第四章 面向对象 4.5 课后习题 (1)类和对象的关系即数据类型与变量的关系,类规定了可以用于存储什么数据,而对象用于实际存储数据,每个对象可存储不同的数据 (2)类中包含属性和方法.属性对应一个类 ...

  8. 《Python语言程序设计》王恺 王志 机械工业出版社 第五章 序列、集合和字典 课后习题答案

    5.8 课后习题 (1)Python 中,通过列表中的 index 方法可以根据指定值查找第一个匹配的列表元素 的位置. (2)Python 中,通过列表中的 insert 方法可以将一个元素插入到列 ...

  9. 《Python语言程序设计》王恺 王志 机械工业出版社 第七章 I/O编程与异常 课后习题答案

    7.7 课后习题 (1)利用 os 模块查看当前系统的名字,应当使用 os.name . (2)利用 os 模块获取当前系统平台路径的分隔符,应当使用 os.sep . (3) 利用 os 模块获取当 ...

最新文章

  1. Linux平台 Oracle 18c RAC安装Part2:GI配置
  2. 神经网络模拟条件反射
  3. Google、Stanford导师带出的AI人才,是你吗?
  4. android okgo参数,Android OkGo基本操作
  5. 仿真的数据能否用来深度学习_数字孪生弥合了深度学习的数据鸿沟
  6. 如何在Hadoop中控制MapReduce任务的数量
  7. 十分钟学会Flask
  8. 一个好的产品要有一个排查问题、报表、运营等相关工具
  9. system进程总是100%
  10. Android各个版本API的区别
  11. 循环数组最大子段和--51nod1050
  12. 系统调用之lseek
  13. 后缀mcp用什么软件打开_如何打开MCP文件?
  14. matlab 象限图,【数据可视化】Tableau教程(十)象限图
  15. Kali渗透-MSF木马免杀技术
  16. STVP烧录HEX文件方法
  17. 28、制作畅销书排行榜页面
  18. UV (网站独立访客)
  19. Chaos Mesh® 的 Chaos Engineering as a Service 探索之路
  20. 基于Springboot外卖系统01:技术构成+功能模块介绍

热门文章

  1. 数学分析 导数与微分(第5章)
  2. 声纹技术(一):声纹技术的前世今生
  3. 滥用线程,导致线上线程池被撑爆的一次意外
  4. 【腾讯快直播】IJK播放器改造:传输层低延迟播放优化
  5. 一个10年测试老鸟珍藏的自学软件测试的网站有哪些?吐血推荐!
  6. Excel中日期、数字、中文大写金额等转文本
  7. 鲜为人知的大小端问题
  8. 嵌入式软件工程师是前端还是后端_嵌入式软件工程师与软件工程师的区别
  9. 用户注册时,密码的加密存储方式
  10. Esp8266进阶之路12 图文并茂学习阿里云主机搭建8266MQTT服务器,实现移动网络远程控制一盏灯!