什么是python的面向对象
python中可以说是万物皆对象,python的对象类型十分的全面,包括了所有的类型(就比如一个整数1,它的对象类型就是 int), 不像其他的面向
对象编程的语言会分为几种类型, 其中能作为对象类型的数据类型只是其中的一部分。
一、创建一个对象
我们在创建一个对象的时候,往往需要先定义一个类,因为类是某个具体对象的抽象表现。
class Mate:
def cook(self):
print('做饭')
def wash(self):
print('洗衣服')
def sleep(self):
print('睡觉')
zhangsan = Mate()
这里我们创建一个Person类,抽象出人可以做出的一些行为,
在下面我们实例化一个法外狂徒张三, 就可以实现使用上面的行为
栗子:
zhangsan.cook()
zhangsan.wash()
zhangsan.sleep()
运行结果:
做饭
洗衣服
睡觉
二、对象属性
1、对象属性的添加
添加属性时候我们可以直接通过对象名+要添加的属性名字 = 值
栗子:
class Person:
def cook(self):
print('做饭')
def wash(self):
print('洗衣服')
def sleep(self):
print('睡觉')
zhangsan = Person()
zhangsan.skill = '吃喝嫖赌'
print(zhangsan.skill)
运行结果:
吃喝嫖赌
在这里我们可以看到我们为法外狂徒张三添加一个技能属性,我们通过直接打印zhangsan.skill判断是否添加成功,这里成功打印,所以添加成功、
2、对象属性的查询
我们查询的时候我们同样可以使用直接打印我们需要查询的属性
print(zhangsan.skill)
运行结果:
吃喝嫖赌
我们也可以使用——dict——方法直接查看张三中所有的属性
print(zhangsan.__dict__)
运行结果:
{'skill': '吃喝嫖赌'}
3、对象属性的修改
对象属性的修改可以直接重新使用 对象名+要添加的属性名字 = 值 的方法来修改属性。
zhangsan.work = '街溜子'
zhangsan.work = '送外卖'
运行结果
送外卖
当我们修改数对象属性的时候,对于不可变类型在修改的时候会在内存中开辟出新的内存空间, 可变类型则不会。
栗子:
当法外狂徒战三悔过自新不当找了新工作
zhangsan.skill = '吃喝嫖赌'
zhangsan.work = '街溜子'
print(zhangsan.work, 'id = ', id(zhangsan.work))
zhangsan.work = '送外卖'
print(zhangsan.work, 'id = ', id(zhangsan.work))
运行结果
街溜子 id = 2078434322736
送外卖 id = 2078435425232
上面为不可变类型的, 我们发现这里在修改对象属性之后,对应的id值也发生了改变,即 zhangsan.work 的指向从储存 ‘街溜子’ 的内存地址 改变为储存 ‘送外卖’ 的内存地址
zhangsan.property = ['华子']
print(zhangsan.property, 'id = ', id(zhangsan.property))
zhangsan.property = ['华子', '电动车', '房子', '女朋友']
print(zhangsan.property, 'id = ', id(zhangsan.property))
运行结果:
['华子'] id = 2036484279424
['华子', '电动车', '房子', '女朋友'] id = 2036484278464
上面为可变类型的, 我们不难看出在张三悔过自新换了工作,他的财产发生改变后之后他的id值没有发生改变。这是因为列表是可变类型,在修改的时候我们直接在原来内存地址中添加了
4、对象属性的删除
删除对象属性十分的简单使用del方法即可
栗子:
del zhangsan.property
print(zhangsan.property)
这里我们删除了张三的财产,这时我们打印就会报错
AttributeError: 'Person' object has no attribute 'property'
这是一个属性错误, 因为我们已经成功删除了张三的财产属性,所以无法打印