基于python下的面向对象练习

1.面向对象三大特性,各有什么用处,说说你的理解

三大特性就是封装,继承,多态
封装:根据职责将属性和方法封装到一个抽象的类中,定义类的准则
继承:实现代码的重用,相同的代码不需要重复的编写,子类直接继承父类的所有属性和方法即可
多态就是不同的子类对象调用相同的方法,产生不同的执行结果。
例如:在同一个方法,有两个子类对象,分别调用的时候有不同的结果

2.面向过程编程与面向对象编程的区别?

通俗易懂的来说:面向过程就是比如解决问题分成很多步骤,主要是强调问题的步骤,面向过程是用函数来实现的
而面向对象就是将问题交给很多人来解决,面向对象分为类和对象,先定义类再创建对象来解决问题。
面向过程:复杂的问题流程化,简单化       应用场景:不在需要扩展了,监控脚本,自动部署脚本,软件解压安装
面向对象:特征与技能的结合体 一切皆对象  应用场景:用户需求经常变化,互联网应用,游戏,企业内部应用

3.python中经典类和新式类的区别?

旧式类也叫做经典类,经典类就是不会自动调用object类
新式类是自动调用object类的
python3.几版本后可以自动调用基类(object类)
经典类:py2 没有继承object的类,以及它的子类都称之为经典类 -->深度优先     
新式类:py3 继承object的类,以及它的子类都称之为新式类 -->广度优先   

4.请简单解释Python中 staticmethod(静态方法)和 classmethod(类方法)

静态方法就是直接通过类名.方法名来调用,使用@staticmethod来当头文件
类方法需要访问类属性,用@classmethod来当头文件,还是通过类名.方法名来调用
区别就是在类方法内部就可以直接访问类属性或者调用其他类方法
静态方法:非绑定方法,类和对象都可调用
类方法:绑定给类的方法,类调用

5.示例, 现有如下代码, 会输出什么:

 class People(object):
      __name = "luffy"
      __age = 18

  p1 = People()
  print(p1.__name, p1.__age)
程序将会报错,因为隐藏属性不能直接被访问,加了__代表是隐藏属性,子类不可以直接访问,
通过父类的公共属性才可以访问私有属性和私有方法。
父类的私有属性和私有方法:
1.子类对象不能在自己的方法内部,直接访问父类的私有属性和私有方法
2.子类对象可以通过父类的公有方法间接访问到私有属性和私有方法
私有属性:私有属性是对象的隐私,不对外公开,外界以及子类都不能直接访问
私有方法:私有方法常用做一些内部的事情

基于python下的面向对象练习_第1张图片
6.下面这段代码的输出结果将是什么?请解释。

class Parent(object):
   x = 1

class Child1(Parent):
   pass

class Child2(Parent):
   pass

print(Parent.x, Child1.x, Child2.x)
Child1.x = 2
print(Parent.x, Child1.x, Child2.x)
Parent.x = 3
print(Parent.x, Child1.x, Child2.x)
这个就是继承,子类继承父类的所有属性和方法
首先第一轮继承(1,1,1)
第二轮child1.x = 2,但是是占位符所以仅仅影响自身输出
(1,2,1)
第三轮从最开始开始继承
(3,2,3)

基于python下的面向对象练习_第2张图片
7.“Joker在BMW 4S店买了一俩BMW X7”,根据业务描述,声明相关类

class Car:
    def __init__(self, name, cartstore):
        self.name = name
        self.carstore = carstore
class CarStore:
    def __init__(self,name):
        self.name =name
class Person:
    def __init__(self, name):
        self.name = name
    def buy(self):
        pass
person = Person('Joker')
carstore = CarStore('BMW')
car = Car('BMW x7', carstore)

person.buy()

基于python下的面向对象练习_第3张图片
8.编写程序, A 继承了 B, 俩个类都实现了 handle 方法, 在 A 中的 handle 方法中调用 B 的 handle 方法

class B():
    def handle(self):
	pass
class A(B):
    def handle(self):
	pass
	B.handle(self)
xx = A()
xx.handle()

基于python下的面向对象练习_第4张图片
9.编写一个学生类,产生一堆学生对象 要求:有一个计数器(属性),统计总共实例了多少个对象

class Student():
    count = 0
    def __init__(self,name):
	self.name = name
	Student.count += 1
a = Student('A')
b = Student('B')
c = Student('C')
print Student.count

基于python下的面向对象练习_第5张图片
10.编写程序, 编写一个学生类, 要求有一个计数器的属性, 统计总共实例化了多少个学生

class Student():
    count = 0
    # 调用类方法
    @classmethod
    def show_student_number(cls):
        print'总共实例化了%d个学生'%cls.count
    def __init__(self,name):
        self.name = name
        Student.count += 1
a = Student('A')
b = Student('B')
c = Student('C')
Student.show_student_number()

基于python下的面向对象练习_第6张图片

你可能感兴趣的:(python)