面向对象初始

1、面对对象初始

# 相同功能的函数进行归类
# 面向对象的特点:
# 1,它是将某些相关的功能(函数)封装到了一起。
# 2, 你要站在上帝的角度,创建一个公共模板,然后通过模板创造不同的对象。
# 类 :具有相同属性和技能的一类事实物。
# 对象:类的具体表现。
# 猫是一类, 隔壁老奶奶家养的阿花一个对象。
# 狗是一类, 我们家养的一条哈士奇也是一个对象。

2、类

# 结构分析:类一般就分为两部分:变量,方法。
# 思想分析:创建一个类 公共模板,通过创建个体对象 可以享有公共方法。

示例:

# 类名
# 类名调用类中静态属性
class Person:
    mind = '有思想'
    animal = '高级动物'
    language = '文字语言'  # 静态属性,静态变量 静态字段

    def work(self):  # 函数 方法,动态方法,动态属性。
        print('人类都会工作')

    def eat(self):
        print('人类都需要吃饭')
# 方法一:__dict__  只能查询(不能增删改) 类中所有的静态属性,动态方法。
print(Person.__dict__)
print(Person.__dict__['mind'])

Person.__dict__['mind'] = '无思想的'
print(Person.__dict__)  #报错  TypeError: 'mappingproxy' object does not support item assignment
# 方法二: 万能的点 .  可以查,可以改,可增,可删。
print(Person.animal)  #查  高级动物

Person.animal = '低级动物'  # 改  animal修改为低级动物
Person.name = '有姓名'    # 增  为Person类增加一个name为有姓名

print(Person.animal)
print(Person.name)

del Person.animal     # 删除
print(Person.animal)  #查询发现animal没有了,报错type object 'Person' has no attribute 'animal'
print(Person.__dict__)
# 类名执行类中的动态方法 (一般不建议用类名执行,除非是特殊方法:类方法,静态方法)
# Person.work('alex')

 


3、对象

# 类名+() 就是一个实例化对象的过程。
p1 = Person() # 实例对象
p2 = Person()
print(p1, p2)

class Game_Role:
    a1 = '英雄联盟'
    name = '太白'
    
    def __init__(self, name, sex, ad, hp):  # __init__方法,特殊方法: 给对象封装属性
        # print(self)
        # print(666)
        
        self.name = name
        self.sex = sex
        self.ad = ad
        self.hp = hp
    
    def fight(self, *args, **kwargs):
        pass
    
    def work(self):
        self.hobby = '大刀'    # 增加hobby为大刀
        print(self.__dict__)  #{'name': '盖伦', 'sex': 'man', 'ad': 30, 'hp': 500, 'hobby': '大刀'}
gailun = Game_Role('盖伦', 'man', 30, 500) print(gailun.name) #盖伦
# 实例化对象的过程有几步:
# 1,实例化对象在内存中产生一个对象空间(内存地址)。
# 2,自动执行 __init__方法并且将对象空间传给了self参数。
# 3, 在 __init__方法中,给对象空间封装一些静态属性。

# 对象调用类的静态属性 使用万能的点: .可以调用类中的静态属性。
print(gailun.a1) #英雄联盟
# 对象执行类中动态方法:
gailun.work() # 此方法是对象调用执行类中的动态方法
print(gailun) # 打印对象:<__main__.Game_Role object at 0x00000041912289E8>
# self 约定俗成 self,类中的方法的第一个参数要设定为self,在对象调用方法时,会自动将对象空间传给self。
工作中:类中的静态属性一般通过类名去调用或者改变;类中的动态方法一般通过对象去执行。
gailun.fight('alex')  #把上面的参数可以传给alex
gailun.work()  #对象执行类中动态方法
# 对象查看自己空间的属性。
# 查看全部:__dict__
print(gailun.__dict__)
# 查看某个对象自己的静态属性: 万能的. 增删改查。
print(gailun.name)  #
print(gailun.sex)   #
gailun.name = 'GAIlun'  #
print(gailun.name)
gailun.hobby = '大刀'  #
print(gailun.hobby)
print(gailun.__dict__)

 

 

 




posted @ 2018-11-13 03:11  小菜鸟111  阅读(160)  评论(0编辑  收藏  举报