Python---面向对象的编程(封装 、继承、多态)

一、面向对象编程

1.面向对象三大特性,各有什么用处,说说你的理解
封装:根据职责将属性和方法封装到一个抽象的类中,定义类的准则
继承:实现代码的重用,相同的代码不需要重复的编写,子类直接继承父类的所有属性和方法即可
多态:就是不同的子类对象调用相同的方法,产生不同的执行结果

2.面向过程编程与面向对象编程的区别?
面向过程:把一个目标实现的过程分成很多步骤,利用多个函数一步一步实现
面向对象:把一个目标的实现分成很多模块,每个模块都有自己的功能,通过模块整合从而实现目标

3.python中经典类和新式类的区别?
旧式类:也称经典类,使用经典类时就不会自动调用object类
新式类:自动调用object类
python3.几版本后可以自动调用基类(object类)

4.请简单解释Python中 staticmethod(静态方法)和 classmethod(类方法)
静态方法就是直接通过类名.方法名来调用,使用@staticmethod来当头文件
类方法需要访问类属性,用@classmethod来当头文件,也通过类名.方法名来调用
区别:在类方法内部可以直接访问类属性或者调用其他类方法

二、实例

一个简单的面向对象编程:

class Dog():
    def eat(self):
        print '小狗爱吃肉'
    def play(self):
        print '小狗爱玩耍'
# 将类转换到对象
dou = Dog()
dou.eat()
dou.play()

执行结果:

class Dog():
    def eat(self):
        print '小狗爱吃肉'
    def play(self):
        print '小狗爱玩耍'
# 创建狗对象
doudou = Dog()
doudou.name = 'wangcai'   # 单独的赋值属性
doudou.eat()
doudou.play()
print wangcai    # 会输出wangcai的引用
addr = id(doudou)
# %x:大印格式为16进制
print '%x' % addr
# %d:大印格式为10进制
print '%d' % addr

# 再创建一个狗对象,一个类可以创建多个对象
lazy_dog = Dog()
lazy_dog.name = 'lala'
lazy_dog.eat()
lazy_dog.play()
print lazy_dog

lazy_dog2 = lazy_dog   # 这个命令表示两个对象是相同的
print lazy_dog2

执行结果:

# 创建狗对象
wangcai = Dog()
#wangcai.name = 'wangcai'   # 单独的赋值属性
wangcai.eat()
wangcai.play()
wangcai.name = 'wangcai'
#  如果在运行中没有找到属性,程序会报错

eg1:

class Person:
    def __init__(self, new_name, weight):
        self.name = new_name
        self.weight = weight
 
    def __str__(self):
        return 'my name is %s weight is %.2f' % (self.name, self.weight)
 
    def run(self):
        print '%s likes to run ' % self.name
    # 在对象的方法内部,是可以直接访问对象的属性
        self.weight -= 0.5
 
    def eat(self):
        print '%s likes to eat ' % self.name
        self.weight += 1
 
 
tom = Person('tom', 75.0)
tom.run()
tom.eat()
print tom
 
lily = Person('lily', 50.0)
lily.run()
lily.eat()
print lily

执行结果:

eg2:摆放家具

      1.房子有户型,总面积和家具名称列表
      2.家具有名字和占地面积,其中
      床:占4平米
      衣柜:占2平米
      餐桌:占1.5平米
      3.将以上三间家具添加到房子中
      4.打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表

# 先定义家具类
class HouseItem():
    def __init__(self, name, area):
        self.name = name
        self.area = area
 
    def __str__(self):
        return '[%s] 占地 %.2f ' % (self.name, self.area)
 
 
# 定义房子类
class House():
    def __init__(self, house_type, area):
        self.house_type = house_type
        self.area = area
        # 剩余面积
        self.free_area = area
        # 家具列表名称
        self.item_list = []
 
    def __str__(self):
        return '户型:%s\n总面积:%.2f[剩余:%.2f]\n家具列表:%s' \
               % (self.house_type, self.area, self.free_area, self.item_list)
 
    def add_item(self, item):
        print '要添加%s' % item
        # 1.判断家具的面积
        if item.area > self.free_area:
            print '%s 面积过大,无法放置' % item
            # 如果不满足,下方代码不执行
            return
        # 2.将家具的名称添加至列表中
        self.item_list.append(item.name)
        # 3.计算剩余面积
        self.free_area -= item.area
 
 
# 创建家具对象
bed = HouseItem('bed', 4)
print bed
chest = HouseItem('chest', 2)
print chest
table = HouseItem('table', 1.5)
print table
 
# 创建房子对象
my_home = House('三室两厅', 100)
 
# 添加家具
my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)
print my_home

执行结果:

eg3:士兵开枪

    1.士兵瑞恩有一把AK47
    2.士兵可以开火
    3.枪能够发射子弹(减少子弹数量 )
    4.枪能够装填子弹 (增加子弹的数量)

猜你喜欢

转载自blog.csdn.net/l675655077/article/details/81182115