面向对象-python

对象

1、对象是由类创建出来的一个具体存在,可以直接使用
2、由哪一个类创建出来的对象,就拥有在哪一个类中定义的属性和方法
3、对象相对应用图纸制造的飞机,而图纸是类
4、在开发中,应该先有类然后有对象
5、用类定义出来的对象,类有什么属性对象就有什么属性,不能多也不能少
6、类名:这类事物的名称,满足大驼峰命名法
大驼峰命名法:每一个单词首字母大写,单词与单词之间没有下划线
7、属性:这类事物具有什么特征
8、方法:这类事物具有什么行为

定义只包含方法的类

class 类名:
def 方法1(self,参数列表)
pass
def 方法2(self,参数列表)
pass

方法的定义和函数几乎一样,区别在于有一个self
类名要符合大驼峰命名法

创建对象

对象变量=类名()

class Cat:
    def eat(self):
        print("猫咪要吃鱼")
    def drink(self):
        print("猫咪要喝水")
tom=Cat()
tom.eat()
tom.drink()

结果为
猫咪要吃鱼
猫咪要喝水

如果给一个对象添加属性 对象名.属性名=内容

class Cat:
    def eat(self):
        print("猫咪要吃鱼")
    def drink(self):
        print("猫咪要喝水")
tom=Cat()
tom.name="大懒猫"
print(tom.name)

结果为:大懒猫

但是不推荐在类的外面定义新的属性,因为如果在运行中没有找到属性就会报错,所以属性应该封装在类里面

init()

初始化方法就是**init()**方法,也是内置方法,init()专门定义类有哪些属性的
在__init__方法内部使用self.属性名=属性的初始值就可以定义属性
定义属性后在使用cat创建的对象,都会拥有该属性

class Cat:
    def __init__(self,name):
        self.name=name
    def eat(self):
        print("猫咪要吃鱼")
    def drink(self):
        print("猫咪要喝水")
tom=Cat("tom")
print(tom.name)
layer_cat=Cat("大懒猫")
print(layer_cat.name)

结果为:
tom
大懒猫

del()

也是一个内置函数,当对象执行完,最后调用的

class Cat:
    def __init__(self,name):
        self.name=name
    def eat(self):
        print("猫咪要吃鱼")
    def drink(self):
        print("猫咪要喝水")
    def __del__(self):
        print(f'{self.name}走了')
tom=Cat("tom")
lanmao=Cat("懒猫")
print(tom.name)
print(lanmao.name)
print(tom.name)

结果为:
tom
懒猫
tom
tom走了
懒猫走了

class Cat:
    def __init__(self,name):
        self.name=name
    def eat(self):
        print("猫咪要吃鱼")
    def drink(self):
        print("猫咪要喝水")
    def __del__(self):
        print(f'{self.name}走了')
tom=Cat("tom")
lanmao=Cat("懒猫")
print("--------------------------")

结果为:
‘------------------------------------------------’
tom走了
懒猫走了

class Cat:
    def __init__(self,name):
        self.name=name
    def eat(self):
        print("猫咪要吃鱼")
    def drink(self):
        print("猫咪要喝水")
    def __del__(self):
        print(f'{self.name}走了')
tom=Cat("tom")
lanmao=Cat("懒猫")
del  tom
print("--------------------------")

结果为:

tom走了
‘-------------------------------------------’
懒猫走了

del tom 是删除对象,如果在此行代码下面在调用被删除的属性,则会报错

str()

返回一个对象的描述信息
class cat():
    def __init__(self,name):
        self.name=name
    def __str__(self):
        return f"猫的名字叫{self.name}" #返回对象的描述信息
    def eat(self):
        print(f"我的猫就爱吃饭")
tom=cat("tom")
print(tom)

结果为:
猫的名字叫tom

练习1

用类创建房子类和家具类,分析家具的属性为家具名称和占地面积
分析房子的属性为,房子样式和面积,方法有添加家具
class  jiaju():
    def __init__(self,name,area):
        self.name=name
        self.area=area
    def __str__(self):
        return f"家具的名称是{self.name}家具的占地面积是{self.area}"
led=jiaju("灯",4)
print(led)
cabinet=jiaju("柜子",8)
print(cabinet)
class house():
    def __init__(self,house_style,area):
        self.house_style=house_style
        self.area=area
        self.free_area=area
        self.jiaju_list=[]
    def __str__(self):
        return f"户型是{self.house_style}\t总面积是{self.area}\t家具有{self.jiaju_list}\t剩余面积有{self.free_area}"
    def adress_jiaju(self,item):
        if item.area>self.free_area:
            print("家具面积大于剩余面积,所以放不下")
            return
        else:
            self.jiaju_list.append(item.name)
            self.free_area=self.free_area-item.area

house1=house("别墅",220)
print(house1)
house1.adress_jiaju(led)
print(house1)
house1.adress_jiaju(cabinet)
print(house1)

结果为:
家具的名称是灯家具的占地面积是4
家具的名称是柜子家具的占地面积是8
户型是别墅 总面积是220 家具有[] 剩余面积有220
户型是别墅 总面积是220 家具有[‘灯’] 剩余面积有216
户型是别墅 总面积是220 家具有[‘灯’, ‘柜子’] 剩余面积有208

练习2

在这里插入图片描述

class Gun():
    def __init__(self, gun_name, sum):
        self.gun_name = gun_name
        self.sum = sum

    def __str__(self):
        return f"这把武器叫{self.gun_name}\t 现在有{self.sum}颗子弹"

    def ardess_sum(self, adress_zidanshumu):  # 枪添加子弹的方法
        if self.sum == 100:  # 假设枪能安装100颗子弹
            return
        elif self.sum + adress_zidanshumu > 100:
            print("压入的子弹数超出弹夹容量")
        else:
            self.sum += adress_zidanshumu
            print(f'添加子弹成功,现在有{self.sum}颗子弹')

    def fashe(self, fashe_sum):  # 枪发射子弹的方法
        for i in range(fashe_sum):
            if self.sum > 0:
                print("哒")
                self.sum -= 1
            else:
                print("没有子弹了")
                break





class soldier():
    def __init__(self, name,weapons):
        self.name = name
        self.weapons = weapons

    def __str__(self):
        return f"我的名字叫{self.name}我的武器是{self.weapons}"

    def fire(self):
        if self.weapons.sum > 0:
            print("我可以冲锋陷阵")
            b=int(input("是否要添加子弹  1------添加,2-----不添加"))
            if b==1:
                c=int(input("请输入你要添加子弹的数目"))
                self.weapons.ardess_sum(c)
                print(f"现在{self.weapons.gun_name}里面有{self.weapons.sum}颗子弹")
                a = int(input("你要开几枪"))
                self.weapons.fashe(a)
            else:
                a = int(input("你要开几枪"))
                self.weapons.fashe(a)


AK47 = Gun("ak47", 20)
print(AK47)
AK47.ardess_sum(10)
AK47.fashe(2)

xusanduo = soldier("许三多",AK47)

print(xusanduo)
xusanduo.fire()

在这里插入图片描述

私有属性和私有方法

私有属性就是对象不希望公开的属性
私有方法就是对象不希望公开的方法
在定义方法或者属性时,在属性名或者方法名前加俩个_,则表示定义私有属性或者私有方法

class women():
    def __init__(self,name):
        self.name=name
        self.__age=18
    def mimi(self):
        #在方法内部可以调用私有属性
        print(f"她的名字叫{self.name}她的年龄是{self.__age}")
xiaofang=women("小芳")
xiaofang.mimi()
#在外部不能调用私有属性
print(xiaofang.age)

结果为:
她的名字叫小芳她的年龄是18
Traceback (most recent call last):
File “C:/Users/py/PycharmProjects/pythonProject/new2.py”, line 9, in
print(xiaofang.age)
AttributeError: ‘women’ object has no attribute ‘age’

class women():
    def __init__(self,name):
        self.name=name
        self.__age=18
    def __mimi(self):
        #在方法内部可以调用私有属性
        print(f"她的名字叫{self.name}她的年龄是{self.__age}")
xiaofang=women("小芳")
xiaofang.__mimi()

结果为:
Traceback (most recent call last):
File “C:/Users/py/PycharmProjects/pythonProject/new2.py”, line 9, in
xiaofang.__mimi()
AttributeError: ‘women’ object has no attribute ‘__mimi’

在这里插入图片描述
一个下划线加类名加方法名可以访问私有方法或属性

class women():
    def __init__(self,name):
        self.name=name
        self.__age=18
    def __mimi(self):
        #在方法内部可以调用私有属性
        print(f"她的名字叫{self.name}她的年龄是{self.__age}")
xiaofang=women("小芳")
xiaofang._women__mimi()
print(xiaofang._women__age)

结果为:
她的名字叫小芳她的年龄是18
18

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值