美文网首页
Python3 & ⾯向对象基础一

Python3 & ⾯向对象基础一

作者: 乘风破浪的姐姐 | 来源:发表于2020-11-18 18:50 被阅读0次

Python是⾯向对象的⾼级编程语⾔.
在Python中“⼀切都是对象”:数字、字符串、元组、列表、字典、集合等内置数据类型,以及函数、⽅法、类、模块都是对象。

在⾯向对象编程过程中,有两个重要组成部分:类 和 对象。
类是对⼀系列具有相同特征和⾏为的事物的统称,是⼀个抽象的概念,不是真实存在的事物,特征即是属性,⾏为即是⽅法。它让我们创建一个新类型的对象,并可以创建该类型的新实例。
对象是类创建出来的真实存在的事物,对象是类的实例。

1、定义类
Python 中类的定义使用 class 关键字,语法如下所示:
class 类名:
属性
...
方法
...
类名要满⾜标识符命名规则,同时遵循⼤驼峰命名习惯

比如定义一个类 Cat,如下所示:

class Cat:
    color = 'red'
    def __init__(self,cid):
        self.cid = cid
    def __run(self,speed):
        print(f'cid是{self.cid}的猫,以{speed}的速度奔跑')
    def runandrun(self,speed):
        self.__run(speed)
        print(f'cid是{self.cid}sss的猫,以{speed}的速度奔跑')

构造方法 init() 会在类实例化时自动调用。无论构造方法还是其他方法都需要将 self 作为第一个参数,它代表类的实例。

类创建好后,可以直接通过类名访问属性,格式为:类名.属性名。

print('color-->', Cat.color)

2、创建对象
创建对象也称类的实例化,比如通过 Cat 类创建对象,创建好对象后,可以使用它访问属性和调用方法。
语法:对象名 = 类名()
如下所示:

 c= Cat('33')
 c.run('50迈')

输出结果:
__cid是33的猫,以50迈的速度奔跑

3、 参数self
1)属性和⽅法
类中定义的属性和⽅法都是公共的,任何该类实例都可以访问
属性和⽅法的查找流程:调⽤⼀个对象的属性时,解析器会在当前的对象中寻找是否还有该属性,如果有,则直接返回当前的对象的属性值。如果没有,则去当前对象的类对象中去寻找,如果有则返回类对象的属性值。如果没有就报错。
类对象和实例对象中都可以保存属性(⽅法):
如果这个属性(⽅法)是所以的实例共享的,则应该将其保存到类对象中
如果这个属性(⽅法)是摸个实例独有的。则应该保存到实例对象中
⼀般情况下,属性保存到实例对象中 ⽽⽅法需要保存到类对象中
2) self
self在定义时需要定义,但是在调⽤时会⾃动传⼊。
self的名字并不是规定死的,但是最好还是按照约定是⽤self
self指向的是调⽤该函数的对象

# 定义类
class Washer():
 def print_info(self):
 # 类⾥⾯获取实例属性
 print(f'haier1洗⾐机的宽度是{self.width}')
 print(f'haier1洗⾐机的⾼度是{self.height}')
# 创建对象
haier1 = Washer()
# 添加实例属性
haier1.width = 500
haier1.height = 800
haier1.print_info()

4、 魔法⽅法
在Python中, xx() 的函数叫做魔法⽅法,指的是具有特殊功能的函数。
1)init() :初始化对象。
init() ⽅法,在创建⼀个对象时默认被调⽤,不需要⼿动调⽤
init(self) 中的self参数,不需要开发者传递,python解释器会⾃动把当前的对象引⽤传递过去。
例如:

class Washer():
    def __init__(self):
        # 添加实例属性
        self.width = 500
        self.height = 800

    def print_info(self):
        print(f'洗衣机的宽度是{self.width}')
        print(f'洗衣机的高度是{self.height}')

haier = Washer()
haier.print_info()

带参数的init()
例如:

class Washer():
 def __init__(self, width, height):
 self.width = width
 self.height = height
 def print_info(self):
 print(f'洗⾐机的宽度是{self.width}')
 print(f'洗⾐机的⾼度是{self.height}')
haier1 = Washer(10, 20)
haier1.print_info()
haier2 = Washer(30, 40)
haier2.print_info()

2)str() :当使⽤print输出对象的时候,默认打印对象的内存地址。如果类定义了 str ⽅法,那么就会打印从在这个⽅法中 return 的数据。
例如:

class Washer():
 def __init__(self, width, height):
 self.width = width
 self.height = height
 def __str__(self):
 return '这是海尔洗⾐机的说明书'
haier1 = Washer(10, 20)
# 这是海尔洗⾐机的说明书
print(haier1)

3)del():当删除对象时,python解释器也会默认调⽤ del() ⽅法
例如:

class Washer():
 def __init__(self, width, height):
 self.width = width
 self.height = height
 def __del__(self):
 print(f'{self}对象已经被删除')
haier1 = Washer(10, 20)
# <__main__.Washer object at 0x0000026118223278>对象已经被删除
del haier1

5、应用实例
实例1:烤地瓜
需求:

  1. 被烤的时间和对应的地⽠状态:
    0-5分钟:⽣的
    5-10分钟:半⽣不熟
    10-15分钟:熟的
    超过15分钟:烤糊了
  2. 添加的调料:
    ⽤户可以按⾃⼰的意愿添加调料
    实现:
class SweetPotato():
    def __init__(self):
        #烤的时间
        self.cook_time =0
        # 地瓜状态
        self.cook_status = '生的'
        # 调料
        self.condiments = []

    def cook(self,time):
        self.cook_time+=time
        if self.cook_time < 5 :
            self.cook_status = '生的'
        elif 5<=self.cook_time<10:
            self.cook_status ='半生不熟'
        elif 10<=self.cook_time<15:
            self.cook_status ='熟了'
        elif self.cook_time >=15:
            self.cook_status = '糊了'

    def addCondiment(self,name):
        self.condiments.append(name)

    def __str__(self):
        return f"烤地瓜的时间为{self.cook_time},地瓜的状态{self.cook_status},添加的作料是:{self.condiments}"


potato1 = SweetPotato()
potato1.cook(5)
potato1.addCondiment('椒盐')
print(potato1)

potato1.cook(6)
potato1.addCondiment('胡椒')
print(potato1)

输出结果:
烤地瓜的时间为5,地瓜的状态半生不熟,添加的作料是:['椒盐']
烤地瓜的时间为11,地瓜的状态熟了,添加的作料是:['椒盐', '胡椒']

实例2:搬家具
需求:将⼩于房⼦剩余⾯积的家具摆放到房⼦中
实现:

class Furniture():
    def __init__(self,name,area):
        #家具名称
        self.name = name
        # 家具占地面积
        self.area = area

class Home():
    def __init__(self,address,area):
        # 家的地址
        self.address = address
        # 家的面积
        self.area = area
        # 家的剩余面积
        self.free_area = area
        # 家中已有家具列表
        self.furnitures = []

    def add_furniture(self,furniture):
        if furniture.area <= self.free_area:
            self.furnitures.append(furniture.name)
            self.free_area-=furniture.area
        else:
            print("家具太大,放不下~")

    def __str__(self):
        return f"地址{self.address},面积为{self.area}的家里,搬进去的家具有{self.furnitures},剩余面积为{self.free_area}"



home = Home('北京',1000)

fur1 = Furniture('桌子',100)
home.add_furniture(fur1)
print(home)

fur2 = Furniture('床',901)
home.add_furniture(fur2)
print(home)

输出结果:
地址北京,面积为1000的家里,搬进去的家具有['桌子'],剩余面积为900
家具太大,放不下~
地址北京,面积为1000的家里,搬进去的家具有['桌子'],剩余面积为900

相关文章

  • Python3 & ⾯向对象基础一

    Python是⾯向对象的⾼级编程语⾔.在Python中“⼀切都是对象”:数字、字符串、元组、列表、字典、集合等内置...

  • Python3 & ⾯向对象基础二

    一、面向对象三大特性:1、封装:将属性和⽅法书写到类的⾥⾯的操作即为封装封装可以为属性和⽅法添加私有权限2、继承:...

  • Python3基础知识

    Python3基础知识 | 基础语法 Python3基础知识 | 编程第一步 Python3基础知识 | 基本数据...

  • 21.Python编程:访问权限

    前面一节重点学习了Python3中的面向对象最基础的类和对象的知识:类的定义、对象、构造方法、属性和方法等,在类中...

  • Python3基础语法--文件操作

    Python3基础语法--文件操作 open() open() 方法用于打开一个文件,并返回文件对象,在对文件进行...

  • 新手应该如何学习python

    1、python语言基础 Python3入门,数据类型,字符串 判断/循环语句,函数,命名空间,作用域 类与对象,...

  • Python学习路线

    Python语言基础 Python3入门,数据类型,字符串 判断/循环语句,函数,命名空间,作用域 类与对象,继承...

  • Python入门系列(二)——基础

    此章节过一遍python3基础,方便日后回忆。目录:一、python3保留字二、python3数据类型三、基本逻辑...

  • Python3学习笔记--基础知识

    Python3学习笔记--基础知识

  • python2/3的差异

    python3的改进 print 成为函数 python3 不再有Unicode对象,默认str就是Unicode...

网友评论

      本文标题:Python3 & ⾯向对象基础一

      本文链接:https://www.haomeiwen.com/subject/zhuzbktx.html