什么是对象
对象是具体物体,拥有属性,拥有行为
python 是一门特别彻底的面向对象编程(OOP)的语言
面向对象:在解决问题的时候,关注的是解决问题的每一个过程
面向对象:在解决问题的时候,关注的是解决问题所需要的对象
面向对象本身是对面向过程的封装
面向对象最重要的:
- 按照功能对象进行划分
- 找到对象,确定对象的属性和行为
如何从面向过程的思想,过渡到面向对象编程
- 列举出一个任务的具体实现步骤
- 分离这些实现步骤中的功能代码块
- 将这些功能代码块划分到某一个对象中
- 根据这个对象以及对应的行为,抽象出对应的类,设计类
类
某一个具体对象特征的抽象
作用:根据抽象的类,生产具体的对象
类的组成:名称,属性,方法
以上的属性和方法,都是抽象的概念。
在产生对象后,对象才具有具体的属性值和方法实现
对象和类的关系:
对象抽象成类,类实例化成对象。
python 分为经典类和新式类
经典类:
class Money:
pass
# 定义一个类
class Money:
pass
print(Money)
# 实例化一个对象
one = Money()
print(one)
<class ‘main.Money’>
<main.Money object at 0x0396CF10>
# 定义一个类
class Money:
pass
print(Money.__name__)
xxx = Money
print(xxx.__name__)
Money
Money
属性
变量是可以改变的量值
属性是属于某个对象的特性。
变量根据不同的位置存在不同的访问权限。
属性只能通过对象来进行访问
判定依据:是否存在宿主
增加属性
直接通过对象,动态添加
# 定义一个类
class Person:
pass
# 根据类,创建一个对象
p = Person()
# 给 p 对象,添加一些属性
p.age = 18
p.height = 180
print(p.age)
print(p.__dict__)
18
{‘age’: 18, ‘height’: 180}
修改属性
p.age = 123
查询属性
# 定义一个类
class Person:
pass
# 根据类,创建一个对象
p = Person()
# 给 p 对象,添加一些属性
p.pets = ['xiaohua', 'xiaohei']
print(p.pets, id(p.pets))
p.pets.append('xiaohuang')
print(p.pets, id(p.pets))
[‘xiaohua’, ‘xiaohei’] 74181688
[‘xiaohua’, ‘xiaohei’, ‘xiaohuang’] 74181688
删除属性
# 定义一个类
class Person:
pass
# 根据类,创建一个对象
p = Person()
# 给 p 对象,添加一些属性
p.age = 18
del p.age
类属性
类增加属性
方式1:
类名.类属性 = 值
方式2:
class Money:
age = 18
count = 1
num = 666
print(Money.age)
print(Money.__dict__)
类查询属性
通过对象查询:
class Money:
age = 18
count = 1
num = 666
one = Money()
print(one.age)
18
Python 对象的属性查找机制,优先到对象自身去查找属性,如果没有找到,则根据__class__找到对象对应的类,到这个类里面查找
class Money:
age = 18
count = 1
num = 666
class Test:
sex = 'male'
one = Money()
one.sex = 'female'
one.__class__ = Test
print(one.sex)
female
修改类属性
class Money:
age = 18
count = 1
num = 666
one = Money()
print(Money.age)
one.age = 19
print(Money.age)
print(one.__dict__)
18
18
{‘age’: 19}
删除类属性
del 类名.属性
del 只能删除直系属性
类属性的内存存储问题
一般情况下,属性存储在__dict__的字典当中,有些内置对象没有这个__dict__属性。
一般对象可以直接修改__dict__属性。
类对象__dict__为只读,默认无法修改,可以通过setattr方法修改
class Money:
pass
one = Money()
one.__dict__ = {'name': 'sz', 'age': 18}
print(one.name)
sz
类属性被各个对象共享
查看一个类的所有属性
类名.__dict__
限制添加属性
__slots__
class Person:
__slots__ = ['age']
pass
p1 = Person()
p1.age = 1