一、面向对象初始
1、结构上理解面向对象:两部分
class Person: animal = '高级动物' #静态属性 walk = '直立行走' def work(self): #方法,动态属性 print('工作。。。。。')
函数vs对象
1、函数封装一个功能,对象封装多个功能
2、面向对象抽象,它是一种思想
3、可扩展,对象一个个都是独立的,耦合性,差异性
类:具有相同属性和功能的一类实物
对象:类的具体体现
2、类名,对象的使用
一个公共框架,一个公共模型
class Person: walk_way = '直立行走' language = '语言' def eat(self): print('吃饭。。。') def work(self): print('工作。。。') 1、查看类中所有的属性方法 Person.__dict__ Person.__dict__['animal'] 通过__dict__方式可以对属性进行查看,但不能对其增改 2、查(增删改)类中某个或某些属性可以用万能的点 print(Person.walk_way) #'直立行走' Person.name = 'alex' #增 del Person.eat #删 Person.walk_way = '跑' #跑 3、操作方法一般不建议通过类名操作 Person.__dict__['eat'](111) Person.eat(6666)
3、对象
class Person: animal = '高级动物' walk_waf = '直立行走' def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def eat(self): print('吃饭。。。。') obj= Person('xx',18,'male') 这个过程就是实例化,会产生一个实例化对象(在内存实例化一个对象空间) 实例化过程内部进行了三个阶段 1、在内存开辟一个对象空间,里面存放了类对象指针 2、自动执行类中__init__方法,将对象空间传给参数self,其它参数手动传入 3、执行__init__方法,给对象空间封装相应的属性 对象查看对象空间中的所有属性__dict__ 对象操作对象空间(增删改查)用万能的点 obj.name #查 obj.name = 'alex' #改 obj.hobby = 'music' #增 del obj.sex = 删 对象操作类空间的属性,只能查 对象操作类空间的方法obj.work()
4、类名称空间,对象名称空间
1、定义一个类,程序从上往下执行,会在内存中开辟一个空间,存放类中的属性和方法
2、实例化这个类时,会在内存中开辟一个新的对象空间,里面有个类的对象指针
3、为什么对象能调用类中的属性与方法,而且只是调用?不能改变?
1、对象先从对象空间中去找,找不到然后通过类对象指针从类中查找,找不到然后从父类中查找。
2、对象只能查看类中的属性,不能进行增删改
4、类不能调用对象中的属性
5、同一个类实例化出来的对象之间是不能互相访问的
6、不同类实例化出来的对象可能可以互相访问
7、给对象封装属性,__init__ 任意位置