第十章 面向对象 课后练习题

目录1、类和对象的概念和关系是什么? 2、什么样的代码才是面向对象? 3、类的构造方法与成员方法之间有什么区别? 4、self关键词的作用是什么?5、说出类方法和静态方法的区别?分别实现一个类方法和静态方法实例6、什么是数据封装与隐藏? 7、什么是方法重写,方法重写的规则是什么? 8、编写程序片段,定义表示课程的类Course。课程的属性包括课程名、编号、选修课号;方法包括设置课程名、设置编号、设置选修课号以及获取课程名、获取编号、获取选修课程号,然后打印输出该对象的课程名、编号以 及选修课号。9、实现一个
摘要由CSDN通过智能技术生成

目录

1、类和对象的概念和关系是什么? 

2、什么样的代码才是面向对象? 

3、类的构造方法与成员方法之间有什么区别? 

4、self关键词的作用是什么?

5、说出类方法和静态方法的区别?分别实现一个类方法和静态方法实例

6、什么是数据封装与隐藏? 

7、什么是方法重写,方法重写的规则是什么? 

8、编写程序片段,定义表示课程的类Course。课程的属性包括课程名、编号、选修课号;方法包括设置课程名、设置编号、设置选修课号以及获取课程名、获取编号、获取选修课程号,然后打印输出该对象的课程名、编号以 及选修课号。

9、实现一个多继承类,并访问该类

10、请编写一个decorator

11、在不运行情况下给出下面程序执行结果  

12、在不运行情况下给出下面程序执行的结果,并说明为什么?

13、按如下规律打印列表 

14、写一个函数, 将驼峰命名法字符串转成下划线命名字符串

15、给定一些NxN的矩阵,对于任意的路线,定义其【和】为其线路上所有节点的数字的和,计算从左上角到右下角的路线和最小值。每条路线只能从某一点到其周 围(上下左右)的点,不可斜行。

16、有两个序列a,b,大小都为n,序列元素的值任意整形数,无序;


1、类和对象的概念和关系是什么? 

类(Class):是具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。

对象:通过类定义的数据结构实例。

类和对象的关系:对象是类的实例。类的实例化结果就是对象,而对一类对象的抽象就是类。通俗的说:类相当于一个模板,对象是由模板产生的样本

类和对象的区别:

1.类是一个抽象的概念,它不存在于现实中的时间/空间里,类只是为所有的对象定义了抽象的属性与行为。
2.对象是类的一个具体表现。它是一个实实在在存在的东西。

2、什么样的代码才是面向对象? 

如果程序中的所有功能都是用类和对象来实现,那么就是面向对象编程了

3、类的构造方法与成员方法之间有什么区别? 

  • 成员方法的函数名可以自定义,但构造方法的函数名是固定的__init__
  • 成员方法需要被手动调用,但构造方法在创建对象的过程中自动被调用
  • 成员方法由创建好的对象调用,可以被调用多次,但是,创建一个对象时,构造方法只被调用一次

4、self关键词的作用是什么?

 self表示的就是实例本身,它用于在类实例方法中引用方法所绑定的实例。当你使用实例调用方法时,由解释器自动将实例传递给方法的self参数,所以我们不需要自己传递self参数

5、说出类方法和静态方法的区别?分别实现一个类方法和静态方法实例

类方法:由类调用(对象也可调用);至少一个cls参数(可以不叫cls,指向该类本身);方法上有装饰器@classmethod;不能调用实例变量

静态方法:由类调用(对象也可调用);无默认参数方法上有装饰器@staticmethod;不能调用实例变量

class P:
	def __init__(self,name):
		self.name=name
	
	@classmethod
	def print_sth(cls): #类方法,类方法中不能用实例变量
        # print(self.name)
		print("class method is inworked!")
        print(cls.__name__)
	
	@staticmethod
	def print_p(): #静态方法,可以有参数也可以没有,不能使用实例变量
        # print(self.name)
		print("static method is inworked!")


a=P("tester")
a.print_sth()# 通过实例名调用类方法
P.print_sth()# 通过类名调用类方法
a.print_p()# 通过实例名调用静态方法
P.print_p()# 通过类名调用静态方法

6、什么是数据封装与隐藏? 

封装指的是隐藏对象中一些不希望被外部所访问到的属性或方法

7、什么是方法重写,方法重写的规则是什么? 

方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

重写父类的方法有两种情况:

1.覆盖父类的方法

2.扩展父类的方法

8、编写程序片段,定义表示课程的类Course。课程的属性包括课程名、编号、选修课号;方法包括设置课程名、设置编号、设置选修课号以及获取课程名、获取编号、获取选修课程号,然后打印输出该对象的课程名、编号以 及选修课号。

class Course:
	def __init__(self,name,id,num):
		self.__course_name = name
		self.__course_id = id
		self.__course_num = num
	
	def get_course_name(self):
		return self.__course_name
	
	def set_course_name(self,name):
		self.__course_name = name
	
	def get_course_id(self):
		return self.__course_id
	
	def set_course_id(self,id):
		self.__course_id = id
	
	def get_course_num(self):
		return self.__course_num
	
	def set_course_num(self,num):
		self.__course_num = num


c1 = Course("English",1,"10001")
print("course_name:",c1.get_course_name())
print("course_id:",c1.get_course_id())
print("course_num:",c1.get_course_num())
print("修改的课程信息:")
c1.set_course_name("Math") # 修改课程名
print("course_
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值