面向对象编程
一.关键字class
结构:
class 类名():
类型体
内部的变量:静态属性,静态变量,静态字段
内部的函数:函数,动态属性,方法
class Person:
role = 'person' #静态属性
language = '语言'
sport = '直立行走'
def eat(self): #动态属性,也称为方法
print('吃吃吃。。。。。')
def run(self):
print('跑跑跑。。。。')
二.函数vs面向对象
1.函数封装一个功能,类封装多个相关功能。
2.面向对象抽象,它是一种思想,站在上帝的角度去理解他。
3.面向对象程序可扩展,且对象都是独立的,既有耦合性又有差异性。
三.类与对象的定义
类:具有相同属性或者功能的一类实物。
对象:对象是类的具体体现。
四.类的操作
1.查看类中的所有属性及方法:__dict__(可以查,不能增删改)
现实情况下一般用__dict__就是查看类中的所有属性及方法,不进行其他操作。
2.查看类中的某个,某些属性,某个方法,用万能的点(.),可以进行属性的增删改
1)增:类名.新增属性 = 值
2)查:类名.属性
3)改:类名.原属性 = 新值
4)删:del 类名.属性
3.执行某个方法
1)不建议通过__dict__执行方法
2)一般使用:类名.方法()
插入点:特殊方法 __init__(self)
类名加(),这个过程是一个实例化过程,他会实例化一个对象(他会在内存实例化一个对象内存空间)
实例化过程进行三个阶段:
1)在内存中开辟了一个对象空间,在空间内放置一个类对象指针
2)自动执行类中__init__方法,并将对象空间的地址传给了__init__函数的self,其他参数手动传入
3)执行__init__方法,给对象空间封装对应的属性
总结:__init__()方法的功能就是给对象空间封装多个属性。
五.对象的操作
1.对象操作对象空间
1)查看对象空间里的所有属性
对象名.__dict__
2)对象操作对象空间里的某个属性
增:对象名.新属性 = 值
删:del 对象名.属性名
改:对象名.属性名 = 新值
查:print(对象名.属性)
2.对象操作类空间的属性
只能查看类空间里的属性,只要改就等同于在对象中加一个属性。
3.对象操作类空间的方法
大多数情况下,都是对象去调用类中的方法。
六.类名称空间,对象名称空间
1.对象为什么能调用类空间里的属性?
对象只能查看类中的属性,不能增删改类中的属性。因为在创建类对象时内部就有一个类对象指针,对象的内存空间会又指向类的空间。
2.类能不能调用对象属性? 不能,类是模板是死的,对象是活的。
3.对象能不能调用其他对象的属性?
不能,同一个类实例化出来的对象之间是不能相互访问的;不同类实例化的对象有可能互相访问。
给一个对象增加属性,可以在任意位置增加。