一,面向对象初识
1.结构上理解:
class A: name = 'alex' # 静态属性,静态变量,静态字段。 def func1(self): # 函数,动态属性,方法。 pass
2.函数 vs 面向对象,对比
函数封装一个功能,而面向对象封装多个相关的功能
面向对象抽象,它是一种思想,站在上帝的角度去理解他
程序可扩展,对象都是一个个独立的。对象之间:耦合性,差异性
3.类,对象
类:具体相同属性或者功能的一类实物
对象:对象是类的具体体现
4.类名,对象的使用
#类:一个公共框架,一个公共模型 class Person: animal = '高级动物' walk_way = '直立行走' language = '语言' def eat(self): print('该吃吃,该喝喝,啥事别忘心里搁') def work(self): print('人类都需要工作。。。')
#类名: #1.查看类中的所有属性及方法__dict__ print(Person.__dict__) print(Person.__dict__['animal']) #通过__dict__方式:单独的属性及方法可以查,但是不能增删改 #工作中,学习中,一般用到__dict__查看类中的所有属性及方法,不进行其他操作。 #2.查看,(增删改)类中某个,某些属性 用 万能的点 . print(Person.animal) # 查 print(Person.language) Person.name = 'alex' # 增 print(Person.name) Person.animal = '低级动物' # 改 del Person.walk_way # 删 print(Person.__dict__) #3,操作方法 一般不通过类名操作!!! Person.__dict__['work'](111) #不建议通过__dict__执行方法 Person.work(666)
#对象 class Person: animal = '高级动物' walk_way = '直立行走' language = '语言' def __init__(self,name,age,eye): # 功能:给对象封装属性的。 self.name1 = name self.age1 = age self.eye1 = eye def eat(self): # print(self) print('该吃吃,该喝喝,啥事别忘心里搁') def work(self): print('人类都需要工作。。。')
#实例化: obj = Person('alex',1000,'小眼睛') # 这个过程是一个实例化过程,他会实例化一个对象(他会在内存实例化一个对象空间)。 print(obj) print(obj.name1) # 实例化过程内部进行了三个阶段: # 1,在内存中开辟了一个对象空间 # 2,自动执行类中的__init__方法,并且将对象空间自动传给self参数,其他参数手动传入。 # 3, 执行__init__方法 给对象空间封装相应的属性。
# 对象: # 对象操作对象空间 # 对象查看对象空间所有的属性 __dict__ print(obj.__dict__)
# 对象操作对象的某个属性 增删改查 万能的点. obj.sex = '男' # 增 del obj.eye1 # 删 obj.eye1 = '大一点' # 改 print(obj.name1) print(obj.__dict__)
# 对象操作类空间的属性 只能查 print(obj.animal) obj.animal = '低级动物' #对象添加属性 print(obj.animal) print(obj.__dict__) print(Person.__dict__)
# 对象操作类空间的方法 obj.eat()
5.类名称空间,对象名称空间
# 公用模板,公共框架 class GameRole: rule = '游戏规则' hp = 1800 def __init__(self,area,nickname,hp,ad): self.area = area self.nickname = nickname self.hp = hp self.ad = ad def attack(self): print('谁施展了一个攻击') def pen(self): self.pen=10000 gailun = GameRole('德玛西呀','草丛伦',1000,75) yasuo = GameRole('艾欧尼亚','托儿所',500,150) penzi = GameRole('中国','键盘侠',10,100)
# 1对象为什么能调用类中的属性与方法?只是调用,不能改变 # 对象名.属性名 先从自己空间去找,没有此属性他会通过类对象指针从类去找, 类中找不到,会从父类去找。 print(gailun.hp) #打印对象的hp属性 gailun.attack = 666 # 给对象增加一个属性 attack = 666 print(gailun.attack) gailun.rule = gailun.rule #增加属性 print(gailun.rule) gailun.nikename = '盖伦' #修改属性 print(gailun.nickname) # 对象只能查看类中的属性,不能增删改类中的属性。
# 2,类能不能调用对象的属性? 不能
# print(GameRole.area) #报错
# 3,对象与对象之间可不可互相调用?
# 同一个类实例化出来的对象之间是不能互相访问的。
# 不同类实例化的对象有可能互相访问。
# 给对象封装属性:__init__ 特殊方法
#在任意位置都可以给对象封装属性