-摘自张磊同学博客.

面向对象

1.请简述类、对象、实例化、实例这些名词的含义:

#类 : 是对具有相同属性和相似行为的一类事物的抽象
#对象: 是一个具有具体属性值的类的实例化
#实例化 : 从一个抽象的类 变成(产生) 一个具体对象的过程
#实例: 就是对象

2.面向对象的三大特性是什么?

#继承 多态 封装

3.什么是方法?类中可以定义哪几种方法?

# 在类中的函数就是方法,描述的是一类事物的行为
# 方法 类方法 静态方法 私有方法 内置方法 属性方法(@property)

4.什么是属性?类中可以定义哪几种属性?

# 类 和 对象所拥有的的具体的"值"指标
# 私有属性 静态属性 动态属性(方法) 对象属性

5.请简述类方法和静态方法有哪些区别?

# 装饰器不同 @staticmethod @classmethod
# 类方法中有一个默认的参数cls,而静态方法没有

6.请简述新式类和经典类的区别?

#在py3里 所有的多继承问题 都符合 广度优先算法
#python3中的所有类 都默认继承object #如果一个类 继承了object 这个类就被称为新式类
#没有继承object类 就被称为经典类 #深度优先 广度优先 都是一种遍历算法,把这个图中所有的项都走一遍,且不会重复 #经典类 遵循 深度优先算法 且没有mro方法 python2
#新式类 遵循 广度优先算法 有mro方法 py2 py3
#py3 super
#单继承中 super就是找父类
#多继承 super寻找的轨迹是根据mro(广度优先)顺序的

7.有一个类定义:

class Person:
  def __init__(self,name,age):
    self.name = name
    self.age = age

1)初始化10个不同的对象

p1=Person('a',10)
p2=Person('b',11)
p3=Person('c',12)
p4=Person('d',13)
p5=Person('e',14)
p6=Person('f',15)
p7=Person('g',16)
p8=Person('h',17)
p9=Person('i',18)
p10=Person('j',19)

2)求最高age的对象的name

l=[p1,p2,p3,p4,p5,p6,p7,p8,p9,p10]#创建一个10个对象的列表
num=0#定义num=0
for i in l:#循环列表
  if i.age>num:#如果对象的age属性大于0
    num=i.age#则num=这个年龄
print(num)

8. 模拟cs游戏
人物角色分为警察和匪徒两种,定义成两个类

所有的警察的角色都是police
每个警察都有自己独有名字,生命值,武器,性别
每个都可以开枪攻击敌人,切攻击目标不能是police

所有的警察的角色都是terrorist
每个匪徒都有自己独有名字,生命值,武器,性别
每个都可以开枪攻击敌人,切攻击目标不能是terrorist

class Police:#定义一个警察类
  def __init__(self,name,gande,wuqi,value=100,):#初始化对象传入参数
    self.name=name#名字属性
    self.gande=gande#伙,属性
    self.wuqi=wuqi#武器属性
    self.value=value#生命值属性
  def ataik(self,name):#定义攻击方式
    if not isinstance(name,Police):#如果不是警察
      name.value-=10#坏人的血值减等于10
    else:
      print('友军')#否则是友军
class Terrorist:#定义一个匪徒的类
  def __init__(self, name, gande, wuqi, value=100, ):#初始化对象
    self.name = name#名字属性
    self.gande = gande#伙属性
    self.wuqi = wuqi#武器属性
    self.value = value#生命值属性   def ataik(self, name):#攻击方式
    if not isinstance(name, Terrorist):如果名字不是匪徒的类
    name.value -= 10#警察的血值-=10
  else:
    print('友军')#否则是友军

9. 实例化一个警察,一个匪徒,警察攻击匪徒,匪徒掉血

p=Police('cris','man','m4a1')#实例化一个警察

t=Terrorist('alex','man','ak47')#实例化一个匪徒

p.ataik(t)#警察攻击匪徒
print(t.value)#显示匪徒的血值

10. 提取警察类和匪徒类相似之处定义成一个父类,使用继承的方式减少代码重复

class pepo:#定义一个人的类
def __init__(self, name, gande, wuqi, value=100, ):#初始化方法
self.name = name#name属性
self.gande = gande#伙属性
self.wuqi = wuqi#武器属性
self.value = value#血值属性 class Police(pepo):#定义一个警察,继承人的类属性
def ataik(self, name):#定义一个攻击方式
if not isinstance(name,Police):#如果不是警察的类
name.value-=10#匪徒的血值减等于10
else:
print('友军')#否则是友军 class Terrorist(pepo):#定义一个匪徒
def ataik(self, name):#攻击方式
if not isinstance(name,Terrorist):#如果不是匪徒的类
name.value-=10#警察生命值减等于10
else:
print('友军') #否则是友军 

思考题:
有一个类的init方法如下:
class Person:
def __init__(self,name,age,sex,weight):
self.name = name
self.sex = sex
self.age = age
self.weight = weight
假设有100个person的对象,
若两个对象的obj1,obj2的name和sex属性相同
即obj1.name==obj2.name and obj1.sex==obj2.sex
我们认为两个对象为同一个对象,已知一个列表中的100个对象,对这100个对象进行去重。
提示:
重写Person类重的两个内置方法

class Person:#定义一个类
def __init__(self,name,age,sex): #初始化属性
self.name = name #对象的name属性
self.age = age #对象的age属性
self.sex = sex #对象的sex属性
def __hash__(self): #定义哈希方法
return hash('%s%s'%(self.name,self.sex)) #返回hash'self.name,self.sex'的值
def __eq__(self, other): #定义一个eq方法
if self.name == other.name and \
self.sex == other.sex: #如果对象属性等于
return True
p_lst = [] #定义个空列表
for i in range(100):#打印0到99
p_lst.append(Person('egon',i,'male'))#p_lst列表添加Person('egon',i,'male')
p_lst.append(Person('alex',i,'male'))#p_lst列表添加Person('alex',i,'male')
p_lst.append(Person('yuan',i,'male'))#p_lst列表添加Person('yuan',i,'male')
print(p_lst)
# print(set(p_lst)) # 报错不可hash 完成了__hash__
# hash是否相等 __hash__
# 值是否相等 __eq__
# a==b
# 收获1
# 对于一些python当中已经存在的内置函数 内置数据类型 内置模块中的方法
# 都有可能依赖于类中的内置方法
# 收获2
# set方法依赖集合中元素对象的__hash__ __eq__

Day 30 面向对象的考试题的更多相关文章

  1. 30 面向对象编程 抽象类 abstract 修饰符可以用来修饰方法也可以修饰类

    抽象类 概念 abstract 修饰符可以用来修饰方法也可以修饰类, 如果修饰方法,那么该方法就是抽象方法: 如果修饰类,那么该类就是抽象类. 抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为 ...

  2. 【Java】 语言基础习题汇总 [2] 面向对象

    30 面向对象的三条主线和面向对象的编程思想? 类与类的成员 : 属性.方法.构造器.代码块.内部类. 面向对象的三大特征:封装.继承.多态[如果还有一个,那就是抽象] 关键字:this.super. ...

  3. 33条C#和.NET经典面试题目及答案

    1. .NET中类和结构的区别? 答:结构和类具有大体的语法,但是结构受到的限制比类要多. a. 结构不能有默认的构造函数,因为结构的副本是用编译器创建和销毁的,所以不需要默认的构造函数和析构函数. ...

  4. 慕课网:C++ & 数据结构

    课程链接:james_yuan的课程 这部分太枯燥了,如果教材难度稍大,根本就学不下去,所以就先看看通俗的视频吧. 课程目录 1.C++远征之起航篇 - C++亮点尽在其中 2.C++远征之离港篇 - ...

  5. 33条C#、.Net经典面试题目及答案

    33条C#..Net经典面试题目及答案[zt] 本文集中了多条常见的C#..Net经典面试题目例如".NET中类和结构的区别"."ASP.NET页面之间传递值的几种方式? ...

  6. 33条C#、.Net经典面试题目及答案[zt]

    33条C#..Net经典面试题目及答案[zt] 本文集中了多条常见的C#..Net经典面试题目例如“.NET中类和结构的区别”.“ASP.NET页面之间传递值的几种方式?”,并简明扼要的给出了答案,希 ...

  7. .net常見面試題(三)

    1, 请你说说.NET中类和结构的区别? 答:结构和类具有大体的语法,但是结构受到的限制比类要多.结构不能申明有默认的构造函数,为结构的副本是又编译器创建和销毁的,所以不需要默认的构造函数和析构函数. ...

  8. PHP与memcache和memcached以及安装使用

    老规则,在作者寒冰讲之前我们要来明确memcache与memcached这两个东西到底是什么? 说法一: 两个不同版本的php的memcached的客户端 new memcache是pecl扩展库版本 ...

  9. C#___.net经典题

    1 请你说说   .NET  中类和结构的区别? 答:结构和类具有大体的语法,但是结构受到的限制比类要多.结构不能申明有默认的构造函数,为结构的副本是又编译器创建 和销毁的,所以不需要默认的构造函数和 ...

随机推荐

  1. MongoDB的基本shell操作(三)

    mongodb_server_ Installer.bat @echo offecho 正在安装服务MongoDB...start cmd /k "cd/d C:\Program Files ...

  2. Apache模块开发

    一.简介 Apache HTTP服务器是一个模块化的软件,使管理者可以选择核心中包含的模块以裁剪功能.可以在编译时选择被静态包含进httpd二进制映象的模块,也可以编译成独立于主httpd二进制映象的 ...

  3. Nginx下SSL证书设置和反向代理

    上来就贴代码: server { listen ; server_name **.****.net; #填写绑定证书的域名 ssl on; ssl_certificate /opt/nginx-/co ...

  4. Yandex插件使用说明——Slager_Z

    Yandex插件使用说明——Slager_Z     操作步骤:   1.1使用Chrome浏览器安装插件 / 1.2使用crx格式文件 2.  改装成Yandex可使用文件 3.  通过Yandex ...

  5. Git 初始状操作指引

    You have an empty repository To get started you will need to run these commands in your terminal. Ne ...

  6. UI设计:掌握这6点,轻松0到1

    非科班出身能成为UI设计师吗? 答案是肯定的.世上无难事,只怕有心人.只要找对方法.坚持不懈,即便是零基础也能学好UI设计. 那么零基础学习UI设计,需要学习哪些知识?我们要从哪些地方学起?怎么系统学 ...

  7. 使用delphi 开发多层应用(二十三)KbmMW 的WIB

    解释WIB 是什么之前,先回顾以下我们前面的各种服务工作方式.前面的各种服务的工作方式都是请求/应答方式. 客户端发送请求,服务器端根据客户端的请求,返回相应的结果.这种方式是一种顺序式访问,是一种紧 ...

  8. 2018.07.04 BZOJ 2618 Cqoi2006凸多边形(半平面交)

    2618: [Cqoi2006]凸多边形 Time Limit: 5 Sec Memory Limit: 128 MB Description 逆时针给出n个凸多边形的顶点坐标,求它们交的面积.例如n ...

  9. Get异步请求

    1: 使用代理 //1.delegate         //创建url      NSURL *url = [[NSURL alloc] initWithString:@"http:ima ...

  10. MFC中添加新的对话框

    MFC工程中,除了系统自动生成的一些对话框之外,还需要根据自己的需求,添加新的对话框.这里总结下自己最近使用的方法. 首先,找到Resource View中自己新建的工程,然后右键,选择Add Cla ...