Python学习笔记-Day15

今日大纲

一、面向对象初识

二、类名、对象的使用

三、类名称空间、对象名称空间

 

 

一、面向对象初识

1、类和对象的定义

类:具有相同属性或功能的一类事物

对象:类的具体体现

从结构上讲:面向对象可以分为两部分:属性和方法。

属性又叫静态属性、静态字段、静态变量

方法又叫动态属性、函数

class A:
    name = 'hello'  #静态属性、静态字段、静态变量

    def fun(self):  #动态属性、方法、函数
        pass

 

2、函数VS面象对象

① 函数封装一个功能,而面向对象封装多个相关的功能

② 面向对象抽象,他是一种独立的思想,要站在上帝的角度去理解

③ 程序可扩展,对象是一个个独立的。耦合性,差异性

 

二、类名、对象的使用

类是公共模板,公共框架

1、类名的使用

① 查看类中所有的属性和方法:__dict__。虽然__dict__也能查看类中某一个属性,但是只用来查看类中的所有属性和方法,不做其他用途

② 增删改查类中的属性:用万能的点(类中没有该属性就增,有该属性就改)

③ 操作类中的方法一般不通过类名(一般通过对象名)

class Person:
    animal = '高等动物'
    walk_way = '直立行走'
    langua = '语言'

    def __init__(self):
        pass
    def eat(self):
        print('吃吃吃,喝喝喝')
    def work(self):
        print('每个人都需要工作')
print(Person.__dict__)  #{'__module__': '__main__', 'animal': '高等动物', 'walk_way': '直立行走', 'langua': '语言', '__init__': <function Person.__init__ at 0x0000022784C75488>, ....
print(Person.__dict__['animal'])  #高等动物  通过__dict__方式可以查单独的属性和方法,但是不能增删改
print(Person.animal)  #查  高等动物
Person.name = 'hello' #类中没有这个属性 增
Person.animal = '低等动物'  #类中有这个属性  改
del Person.walk_way  #

 

2、对象的使用

① 实例化一个对象:对象名 = 类名(init 参数),会经历三个阶段

Ⅰ 创建一个对象名称空间,产生一个指向类名称空间的指示盘:类对象指针

Ⅱ 将该对象名称空间的地址传给__init__函数的self参数

Ⅲ 执行 __init__方法,给对象封装属性

② 对象操作对象空间

Ⅰ 对象查看对象空间的所有属性__dict__

Ⅱ 对象操作对象的某个属性,增删改查,用万用的点(对象中没有该属性就增,有该属性就减)

③ 对象操作类空间的属性,只能查

④ 对象操作类空间的方法:万能的点

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('该吃吃,该喝喝')
    def work(self):
        print('每个人都应该要有工作')
obj = Person('小明',12,'蓝眼睛')  #实例化一个对象
print(obj)  #<__main__.Person object at 0x00000207183C7748>
print(obj.__dict__)  #{'name1': '小明', 'age1': 12, 'eye1': '蓝眼睛'}

#增删改查
print(obj.name1)  # 查 小明
obj.sex  = ''
print(obj.__dict__)  # 增 {'name1': '小明', 'age1': 12, 'eye1': '蓝眼睛', 'sex': '男'}
obj.eye1 = '黄眼睛'
print(obj.__dict__)  # 改 {'name1': '小明', 'age1': 12, 'eye1': '黄眼睛', 'sex': '男'}
del obj.eye1
print(obj.__dict__)   # 删 {'name1': '小明', 'age1': 12, 'sex': '男'}
print(obj.animal)  #高级动物
obj.animal ='低级动物'  #只是在obj的空间里增加属性 animal = '低级动物'

#调用类中的方法
obj.eat()  #该吃吃,该喝喝

 

三、类名称空间、对象名称空间

类的执行过程:

class GameRole:
    rule = '游戏规则'
    def __init__(self,area,nickname,hp,ad):
        self.area = area
        self.nickname = nickname
        self.hp = hp
        self.ad = ad

    def attack(self):
        print('施展了一个攻击')

gailun = GameRole('德玛西亚','草丛伦',10000,75)
yasuo = GameRole('艾欧尼亚','托儿所',500,150)

执行过程:

① 遇到类名创建一个类名称空间,空间中包含类中的所有属性和方法

② 实例化一个对象,创建一个对象空间,产生一个指向类名称空间的指示盘:类对象指针,并将对象的空间地址传给__init__的参数self

③ 执行init方法,给对封装init里有的属性

 

1、对象只能调用类空间的属性和方法,不能进行增删改。因为对象空间中有指向类的类对象指针。调用方法:对象名.属性

在查看一个属性时,会先从对象空间中找,没有此属性会通过类对象指针从类中寻找,类中找不到会从父类中找。

2、类不能调用对象的属性

3、对象与对象之间能不能互相调用?

同一个类实例化的对象之间不能互相访问

不同实例化对象之间有可能互相访问

4、可以在任何位置给对象封装属性

① 直接用万能的点

② 在类中定义一个函数,对象调用这个函数。

class GameRole:
    rule = '游戏规则'
    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('德玛西亚','草丛伦',10000,75)
yasuo = GameRole('艾欧尼亚','托儿所',500,150)
penzi = GameRole('中国','键盘侠',10,100)
penzi.pen()
print(penzi.__dict__)   #{'area': '中国', 'nickname': '键盘侠', 'hp': 10, 'ad': 100, 'pen': 10000}

 

posted @ 2018-08-23 21:54  whuitian  阅读(181)  评论(0编辑  收藏  举报