一、选择题
1.下列说法中不正确的是( )。D
A.类是对象的模板,而对象是类的实例 p175
B.实例属性名如果以__开头,就变成了一个私有变量 p177
C.只有在类的内部才可以访问类的私有变量,外部不能访问 p177
D.在Python中,一个子类只能有一个父类 p181 可以多继承
2.下列选项中不是面向对象程序设计基本特征的是( )。C
A.继承 B.多态 C.可维护性 D.封装
3.在方法定义中,访问实例属性x的格式是( )。B
A.x B.self.x C.self[x] D.self.getx()
实例属性属于对象,只能通过对象名访问 p178
4.下列程序的执行结果是( )。D p179
- class point:
- x=10
- y=10
- def __init__(self,x,y):
- self.x=x
- self.y=y
- pt=point(20,20)
- print(pt.x,pt.y)
A.10 20 B.20 10 C.10 10 D.20 20
5.下列程序的执行结果是( )。A
- class C():
- f=10
- class C1(C):
- pass
-
- print(C.f,C1.f)
A.10 10 B.10 pass C.pass 10 D.运行出错
二、填空题
1.在Python中,定义类的关键字是 。class
2.类的定义如下:
- class person:
- name='Liming'
- score=90
该类的类名是 person ,其中定义了 name 属性和 score 属性,它们都是 公有属性。如果在属性名前加两个下划线(__),则属性是 私有属性。将该类实例化创建对象p,使用的语句为 p=person() ,通过p来访问属性,格式为 p.name,p.score 。
3.Python类的构造方法是 __init__,它在 生成 对象时被调用,可以用来进行一些属性 初始化 操作;类的析构方法是 __del__, 它在 释放对象时调用,可以进行一些释放资源的操作。
4.可以从现有的类来定义新的类,这称为类的 继承,新的类称为子类 ,而原来的类称为 基类 、父类或超类。
5.创建对象后,可以使用 self 运算符来调用其成员。.
6.下列程序的运行结果为 。100
- class Account:
- def __init__(self,id):
- self.id=id
- id=888
- acc=Account(100)
- print(acc.id)
语句 self.id=id 是给这个类的实例的id赋值,
而 id=888 是这个init函数的临时变量,这个函数结束后就没了。
最后 print(acc.id) 访问的是类的实例的id的值
7.下列程序的运行结果为 。100 100
- class parent:
- def __init__(self,param):
- self.v1=param
- class child(parent):
- def __init__(self,param):
- parent.__init__(self,param)
- self.v2=param
- obj=child(100)
- print(obj.v1,obj.v2)
8.下列程序的运行结果为 。400
- class account:
- def __init__(self,id,balance):
- self.id=id
- self.balance=balance
- def deposit(self,amount):
- self.balance+=amount
- def withdraw(self,amount):
- self.balance-=amount
- acc1=account('1234',100)
- acc1.deposit(500)
- acc1.withdraw(200)
- print(acc1.balance)
三、问答题
可以看一下这个博客:
1.什么叫类?什么叫对象?它们有何关系?
( 1)对象是一个实体,这个实体具有明确定义的边界和标识,并且封装了状态和行为;
( 2)类就是对象的抽象描述,这些对象共享相同的属性、操作、关系和语义。
( 3) 类是对象的抽象,而对象是类的实例,是具体的;通过类可以构造具体的对象。
2.在Python中如何定义类与对象?
类是一种广义的数据类型,这种数据类型中的元素(或成员)既包含数据,也包含操作数据的函数。在Python 中,通过class 关键字来定义类。定义类的一般格式如下:
- class 类名:
- 类体
类是抽象的,要使用类定义的功能,就必须将类实例化,即创建类的对象。在Python 中,用赋值的方式创建类的实例,一般格式为:
对象名=类名(参数列表)
创建对象后,可以使用“.”运算符,通过实例对象来访问这个类的属性和方法(函数),一般格式为:
- 对象名.属性名
- 对象名.函数名()
3.类的属性有哪几种?如何访问它们?
类的属性:一般分为公有属性和私有属性,默认情况下所有得属性都是公有的,如果属性的名字以两个下划线开始,就表示为私有属性,没有下划线开始的表示公有属性。 python的属性分为实例属性和静态属性,实例属性是以self为前缀的属性,如果构造函数中定义的属性没有使用self作为前缀声明,则该变量只是普通的局部变量,类中其它方法定义的变量也只是局部变量,而非类的实例属性。
- class Fruit:
- price=0 #定义一个类属性
- def __init__(self): #构造函数
- self.color="red" #实例属性,以self为前缀
- zone="China" #局部变量,不以self为前缀
- if __name__=="__main__":
- print(Fruit.price) #使用类名调用类变量 0
- apple=Fruit() #实例化apple
- print(apple.color) #打印apple实例的颜色 red
- Fruit.price=Fruit.price+10 #将类变量+10
- print("apple's price:",+str(apple.price)) #打印apple实例的price 10
- banana=Fruit() #实例化banana
- print("banana's price:"+str(banana.price)) #打印banana实例的price 10
-
注意:python的类和对象都可以访问类属性;类的外部不能直接访问私有属性(属性名以两个下划线开始),当把上面的self.color=color改为self.__color="red",再次执行print(Fruit.__color)的时候就会报错
4.继承与派生有何关系?如何实现类的继承?
继承与派生其实是同一过程从不同的角度看,我们将保持已有类的特性而构造新类的过程称为继承,说白了继承的目的就是实现原来设计与代码的重用,希望尽量利用原有的类。然而当新的问题出现,原有程序无法解决或不能完全解决时,需要对原有程序进行改造,在已有类的基础上新增自己的特性而产生新类的过程称为派生。
5.什么是多态?在Python中如何体现?
多态,指抽象类中定义的一个方法,可以在其子类中重新实现,不同子类中的实现方法也不相同。