本文已参与「新人创作礼」活动,一起开启掘金创作之路。
面向对象基础
- 理解面向对象
- 类和对象
- 添加和获取对象属性
- 魔法方法
理解面向对象
面向对象是一种抽象化的编程思想,很多编程语言中都有的一种思想。
例如:洗衣服
洗衣服一般几种方法洗呢?
有手洗和机器洗
他们之间的工作步骤又是什么呢
手洗:
找盆-放水-加洗衣粉-侵泡-搓洗-拧干水-倒水-漂洗-拧干-晾晒
机器洗:
打开洗衣机-放衣服-加洗衣粉-按下启动按钮-晾晒
我们通过对比会发现
用机器洗会更快
面向对象就是把编程当作事物,对外界来说,事物是直接使用的,不用去管它内部的情况,而编程就是设置事物能够做什事
类和对象
首先说一下
在我们面向对象编程的过程中,有两个重大的组成部分分别是:类和对象
那么我们前面说了,通过比喻,对象他比作是一个事物(洗衣机)
而剩下的类是什么呢
这里说一下
我们的洗衣机他是又工厂制造出来的
而在生成一个产品,生产一个品牌的洗衣机他必须要有的一个东西就是设计图纸
所以说,这个洗衣机他怎么去洗衣服怎么运行都说靠设计图纸去制造出来的
那么设计图纸就是我们面向对象中的类
类和对象的关系
类=设计图纸
对象=设计图纸的智造成品
他们之间的关系就是:用类去创造一个对象
当我有图纸了我就知道怎么制作洗衣机了,我就可以制作洗衣机了
理解类和对象
对象是类创建出来的真实存在的事物
注意:在开发中,先有类,再有对象
定义类
语法
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()
标准输出:
对象已经被删除