Python第十七天面向对象基础

180 阅读6分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

面向对象基础

  • 理解面向对象
  • 类和对象
  • 添加和获取对象属性
  • 魔法方法

理解面向对象

面向对象是一种抽象化的编程思想,很多编程语言中都有的一种思想。

例如:洗衣服

洗衣服一般几种方法洗呢?

有手洗和机器洗

他们之间的工作步骤又是什么呢

手洗:

找盆-放水-加洗衣粉-侵泡-搓洗-拧干水-倒水-漂洗-拧干-晾晒

机器洗:

打开洗衣机-放衣服-加洗衣粉-按下启动按钮-晾晒

我们通过对比会发现

用机器洗会更快

面向对象就是把编程当作事物,对外界来说,事物是直接使用的,不用去管它内部的情况,而编程就是设置事物能够做什事

类和对象

首先说一下

在我们面向对象编程的过程中,有两个重大的组成部分分别是:对象

那么我们前面说了,通过比喻,对象他比作是一个事物(洗衣机)

而剩下的类是什么呢

这里说一下

我们的洗衣机他是又工厂制造出来的

而在生成一个产品,生产一个品牌的洗衣机他必须要有的一个东西就是设计图纸

所以说,这个洗衣机他怎么去洗衣服怎么运行都说靠设计图纸去制造出来的

那么设计图纸就是我们面向对象中的

类和对象的关系

类=设计图纸
​
对象=设计图纸的智造成品
​
​
​
他们之间的关系就是:用类去创造一个对象
​
​
当我有图纸了我就知道怎么制作洗衣机了,我就可以制作洗衣机了

理解类和对象

对象是类创建出来的真实存在的事物

注意:在开发中,先有类,再有对象

定义类

语法

class 类名():
    代码
#定义类class xiyiji():
    #定义洗衣机的功能
    def wash(self):
        print('能洗衣服')
        
#创建对象
​
haier = xiyiji()
​
​
#验证对象是否创建成功
#打印haier对象出来
print(haier)
#打印出了内存地址,说明创建成功了#使用wash这个功能能不能用
#wash()是一个实例方法
#对象名.wash()
haier.wash()
​
#打印结果能洗衣服

创建对象

对象又叫实例

语法

对象名=类名()
#创建对象
haier=xiyiji()
​

self

self 指的是调用函数的对象。

#定义类class xiyifu():
    def  wash(self):
        print('洗衣机洗衣服')
        print(self)
        #打印self 其实就和打印 haier是一样的 
        
#创建对象
​
haier = xiyifu()
print(haier)
​
#验证self功能
​
haier.wash()
#打印self 其实就和打印 haier是一样的 
#self 指定是调用函数的对象,#haier 这个对象调用了wash()-也就是说要把haier 这个对象传入到wash 中的self 里面去,这个时候当我们要打印self 就会和我们打印haier时出现的内存地址一样

类可创建多个对象

#定义类
class xiyifu():
    #定义函数
    def wash(self):
        print('洗衣服')
        print(self)
        
#创建对象
haier = xiyifu()
#对象调用函数
haier.wash()
​
#当我们在创建多一个对象
​
haier1 = xiyifu()
haier1.wash()
​
#打印结果洗衣服
#<__main__.xiyifu object at #0x7f5959e58670>
#洗衣服
#<__main__.xiyifu object at #0x7f5959e58b50>#会发现内存地址发送了改变
#间接说明了一个类可以创建多个对象

添加和获取对象属性

属性即是体征:比如洗衣机的宽度,高度,重量

而对象的属性既可以在类外面添加和获取,也可以在类里面添加和获取

类外面添加对象属性

语法

对象名.属性名 = 值
#waier对象添加宽度属性
haier.width = 500
#为waier对象添加高度属性
haier.height = 800
#创建一个类
​
class xiyifu():
    #创建一个函数
    def wash(self):
        print('洗衣服')
        
#创建对象
haier = xiyifu()
​
#添加属性haier.width = 400
haier.heigh = 500

类外面获取对属性

语法

对象名.属性名
print(f'haier洗衣机的宽度是{haier.width}')
print(f'haier洗衣机的高度是{haier.height}')
#创建一个类class xiyifu():
    #创建一个函数
    def wash(self):
        print('洗衣服')
        
#创建对象
haier = xiyifu()
​
#添加属性
​
haier.width = 400
haier.heigh = 500#获取属性 对象名.属性名
​
​
print(f'haier洗衣机的宽度是{haier.width}')
print(f'haier洗衣机的高度是{haier.heigt}')

标准输出:

haier洗衣机的宽度是400
haier洗衣机的高度是500

类里面获取对象属性

语法

self.属性名
#创建一个类class xiyifu():
    def wash(self):
        print('洗衣服')
​
    #创建一个函数
    def print_info(self):
        #获取属性 对象名.属性名
        print(f'haier洗衣机的宽度是{self.width}')
        print(f'haier洗衣机的高度是{self.heigh}')
#创建对象
haier = xiyifu()
#添加属性
​
haier.width = 400
haier.heigh = 500#调用对象
​
haier.print_info()

标准输出:

haier洗衣机的宽度是400
haier洗衣机的高度是500

魔法方法

在Python中

重点

__xx__() 这样的函数叫做魔法方法,指的是具有特殊功能的函数

如:

__init__() 方法的作用:初始化对象
#定义类
class xiyifu():
    #定义__init__添加实例属性
    def __init__(self):
        #添加实例属性
        self.width = 500
        self.heigh = 800
    def print_info(self):
        #类里面调用实例属性
        print(f'洗衣机的宽度是{self.width},高度是{self.heigh}')
        
​
#创建对象
haier = xiyifu()
​
#通过对象调用函数
​
haier.print_info()

标准输出:

洗衣机的宽度是500,高度是800

注意

__init__()方法,在创建一个对象时默认被调用,不需要手动调用
_init_(self)中的self 参数,不需要开发者传递,python解析器会自动把当前的对象引用传递过去

带参数的__init__()

#定义类
class Xiyifu():
    #定义__init__添加实例属性
    #加多两个形参width,heigh
    def __init__(self, width, heigh):
        #添加实例属性
        self.width = width
        self.heigh = heigh
    def print_info(self):
        #类里面调用实例属性
        print(f'洗衣机的宽度是{self.width}')
        print(f'洗衣机的高度是{self.heigh}')
        
​
#创建对象
haier = Xiyifu(10,20)
#通过对象调用函数
haier.print_info()
​
​
​
#创建第二对象
haier1 = Xiyifu(100,200)
#通过对象调用函数
haier1.print_info()
​

标准输出:

洗衣机的宽度是10
洗衣机的高度是20
洗衣机的宽度是100
洗衣机的高度是200

str()

在使用print输出对象的时候,默认打印对象的内存地址。如果类定义了str方法,那么就会打印从在这个方法中return的数据

#创建类
class xiyifu():
    def __init__(self,width,heigh):
        self.width = width
        self.heigh = heigh
        
    def __str__(self):
        return '这个是haier洗衣机的说明书'
        
#创建对象
​
haier=xiyifu(100,200)
#这是haier洗衣机的说明书
print(haier)

标准输出:

这个是haier洗衣机的说明书

del()

在删除对象时,python解析器也会默认调用__del__()方法

#创建对象
class xiyiji():
    def __init__(self,width,heigh):
        self.width = 
        self.heigh = 200
        
    def __del__(self):
        print(f'{self}对象已经被删除')
        
haier = xiyiji(100,200)
​
del haier

标准输出:

<__main__.xiyiji object at 0x7f68b50e4670>对象已经被删除
#创建对象
class xiyiji():
    def __init__(self):
        self.width =100 
        self.heigh = 200
        
    def __del__(self):
        print('对象已经被删除')
        
haier = xiyiji()

标准输出:

对象已经被删除