• python基础之面向对象基础语法


    一、面向对象基础语法

    1.dir内置函数

    在这里插入图片描述

    2.定义一个简单的类(只包含方法):

    类可以只有一个但是使用相同的类可以创建不同的对象;

    二、实例演练

    3.面对对象练习:小明爱跑步

    需求:

    1.小明体重75.0公斤;
    2.小明每次跑步都会减肥0.5公斤;
    3.小明每次吃东西体重增加1公斤;
    class Person:
    def init(self,name,weight):
    self.name=name
    self.weight=weight
    def str(self):
    return “我的名字叫%s体重是%.2f公斤”%(self.name,self.weight)
    def run(self):
    print(“%s爱跑步,跑步锻炼身体”%self.name)
    self.weight-=0.5
    def eat(self):
    print(“%s是吃货,吃完这顿再减肥”%self.name)
    self.weight+=1
    xiaoming=Person(“小明”,75.0)
    xiaoming.run()
    xiaoming.eat()
    print(xiaoming)
    xiaomei=Person(“小美”,45)
    xiaomei.eat()
    xiaomei.run()
    print(xiaomei)
    print(xiaoming)

    class Person:
        def __init__(self,name,weight):
            self.name=name
            self.weight=weight
        def __str__(self):
            return "我的名字叫%s体重是%.2f公斤"%(self.name,self.weight)
        def run(self):
            print("%s爱跑步,跑步锻炼身体"%self.name)
            self.weight-=0.5
        def eat(self):
            print("%s是吃货,吃完这顿再减肥"%self.name)
            self.weight+=1
    xiaoming=Person("小明",75.0)
    xiaoming.run()
    xiaoming.eat()
    print(xiaoming)
    xiaomei=Person("小美",45)
    xiaomei.eat()
    xiaomei.run()
    print(xiaomei)
    print(xiaoming)
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这里插入图片描述

    4.摆放家具练习:

    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):
    #python能够自动将一对括号内部的代码连在一起
    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)
    if item.area>self.free_area:
    print(“%s的面积太大了,无法添加”%item.name)
    return
    self.item_list.append(item.name)
    self.free_area-=item.area
    bed=HouseItem(“席梦思”,4)
    chest=HouseItem(“衣柜”,2)
    table=HouseItem(“餐桌”,1.5)
    print(bed)
    print(chest)
    print(table)
    my_home=House(“两室一厅”,60)
    my_home.add_item(bed)
    my_home.add_item(chest)
    my_home.add_item(table)
    print(my_home)

    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):
            #python能够自动将一对括号内部的代码连在一起
            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)
            if item.area>self.free_area:
                print("%s的面积太大了,无法添加"%item.name)
                return
            self.item_list.append(item.name)
            self.free_area-=item.area
    bed=HouseItem("席梦思",4)
    chest=HouseItem("衣柜",2)
    table=HouseItem("餐桌",1.5)
    print(bed)
    print(chest)
    print(table)
    my_home=House("两室一厅",60)
    my_home.add_item(bed)
    my_home.add_item(chest)
    my_home.add_item(table)
    print(my_home)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    在这里插入图片描述
    在这里插入图片描述

    5.士兵突击,

    需求:

    1.士兵许三多有一把AK47;
    2.士兵可以开火;
    3.枪能够发射子弹;
    4.枪能够装填子弹——增加子弹数量;(一个对象的属性可以是另一个类创建时的对象)
    class Gun:
    def init(self,model):
    self.model=model
    self.bullet_count=0
    def add_bullet(self,count):
    self.bullet_count+=count
    def shoot(self):
    if self.bullet_count<=0:
    print(“[%s]没有子弹了”%self.model)
    return
    self.bullet_count-=1
    print(“[%s]突突突,剩余【%d】发子弹”%(self.model,self.bullet_count))

    class Soldier:
    def init(self,name):
    self.name=name
    self.gun=None
    def fire(self):
    if self.gun==None:
    print(“[%s]还没有枪”%self.name)
    return
    print(“冲啊【%s】”%self.name)
    self.gun.add_bullet(50)
    self.gun.shoot()
    ak47=Gun(“AK47”)
    xusanduo=Soldier(“许三多”)
    xusanduo.gun=ak47
    xusanduo.fire()

    class Gun:
        def __init__(self,model):
            self.model=model
            self.bullet_count=0
        def add_bullet(self,count):
            self.bullet_count+=count
        def shoot(self):
             if self.bullet_count<=0:
                 print("[%s]没有子弹了"%self.model)
                 return
             self.bullet_count-=1
             print("[%s]突突突,剩余【%d】发子弹"%(self.model,self.bullet_count))
    
    
    class Soldier:
        def __init__(self,name):
            self.name=name
            self.gun=None
        def fire(self):
            if self.gun==None:
                print("[%s]还没有枪"%self.name)
                return
            print("冲啊【%s】"%self.name)
            self.gun.add_bullet(50)
            self.gun.shoot()
    ak47=Gun("AK47")
    xusanduo=Soldier("许三多")
    xusanduo.gun=ak47
    xusanduo.fire()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    在这里插入图片描述

    6.私有属性和方法:

    class Women:
    def init(self,name):
    self.name=name
    self.__age=18#age前面增加两个下划线即变为私有属性;
    def secret(self):
    print(“%s的年龄是%d”%(self.name,self.__age))
    def __secret(self):
    print(“hello”)
    xiaofang=Women(“小芳”)
    #私有属性在外部不能被直接访问
    #print(xiaofang.__age)
    #在对象的方法内部可以访问对象的私有属性
    xiaofang.secret()
    #私有方法同样不能在外面被直接访问
    #xiaofang.__secret()

    class Women:
        def __init__(self,name):
            self.name=name
            self.__age=18#age前面增加两个下划线即变为私有属性;
        def secret(self):
            print("%s的年龄是%d"%(self.name,self.__age))
        def __secret(self):
            print("hello")
    xiaofang=Women("小芳")
    #私有属性在外部不能被直接访问
    #print(xiaofang.__age)
    #在对象的方法内部可以访问对象的私有属性
    xiaofang.secret()
    #私有方法同样不能在外面被直接访问
    #xiaofang.__secret()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    三、伪私有属性和私有方法(科普)

    在日常生活中,不要使用这种方法,访问对象的私有属性或私有方法;

    python中没有真正意义的私有;

    1.在给属性或方法命名时,实际是对名称做了特殊处理,使得外界无法访问到;
    2、处理方式:在名称前面加上_类名=>_类名_名称
    class Women:
    def init(self,name):
    self.name=name
    self.__age=18#age前面增加两个下划线即变为私有属性;
    def secret(self):
    print(“%s的年龄是%d”%(self.name,self.__age))
    def __secret(self):
    print(“hello”)
    xiaofang=Women(“小芳”)
    #私有属性在外部不能被直接访问
    print(xiaofang._Women__age)
    #在对象的方法内部可以访问对象的私有属性
    xiaofang.secret()
    #私有方法同样不能在外面被直接访问
    #xiaofang.__secret()

    class Women:
        def __init__(self,name):
            self.name=name
            self.__age=18#age前面增加两个下划线即变为私有属性;
        def secret(self):
            print("%s的年龄是%d"%(self.name,self.__age))
        def __secret(self):
            print("hello")
    xiaofang=Women("小芳")
    #私有属性在外部不能被直接访问
    print(xiaofang._Women__age)
    #在对象的方法内部可以访问对象的私有属性
    xiaofang.secret()
    #私有方法同样不能在外面被直接访问
    #xiaofang.__secret()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

  • 相关阅读:
    AT_cf_2015_morning_easy_c ヘイホー君と最終試験 题解
    常用的并发容器介绍
    你不得不了解的CSS数据类型
    毕设 JAVA.JSP花店管理系统
    拼多多API接口大全
    【Qt】之【Bug】MaintenanceTool qt安装组件 无法下载存档
    ARM裸机二
    [安全开发] SQL注入扫描(一股子GPT味~)
    机器学习基本模型与算法在线实验闯关
    02 Spring_IOC 控制反转
  • 原文地址:https://blog.csdn.net/m0_57297999/article/details/128070516