py 5.24

#面向对象
#类:模子。Person,不具体。
#实例/对象:依托于类产生的具体的带有属性的。alex
#实例化:产生对象的过程。 alex = Person()
#类:
#分为静态属性(一般的变量)。动态属性(函数)
# 查看类中的静态属性:类.变量名
#查看类中的动态属性:类.函数名(或方法名)--->得到的是函数的内存地址。
#调用动态属性:类.函数名()
#创建类:class 类名(第一个字母必须大写,后面没有括号):
#创建对象:
# alex = Person(参数):  #内存中开辟一个属于对象的内存空间
# 同时类中会自动执行 def __init__(self):函数    --->外面的参数会通过这里传进来。
#self也会指向刚才对象打开的内存空间,self与alex内存地址相同。
#给__init__(self)传参并定义self的变量值,存在内存地址中,执行结束后将结果返回给对象alex。
#这样对象就产生了,可以用对象查看其中的各种属性或者操作其它类中的方法。
#人狗大战:
# class Person:     #建立一个类
#     def __init__(self,name,sex,hp,ad):  #初始化方法
#         self.name = name
#         self.sex = sex
#         self.hp = hp
#         self.ad = ad                    #执行结束将各个变量值传给对象。(因为在同一个内存地址)
#     def attack(self,dog):              #类中的一个方法。可以用对象直接调用,必须用这个类实例化的对象来调用。
#         print('%s攻击了%s'%(self.name,dog.name))
#         print('%s掉了%s点血,还剩%s点血'%(dog.name,self.ad,dog.hp-self.ad))
#
# class Dog:
#     def __init__(self, name, kind, hp, ad):
#         self.name = name
#         self.kind = kind
#         self.hp = hp
#         self.ad = ad
#     def bite(self,person):
#         print('%s咬了%s'%(self.name,person.name))
#         if person.hp <= self.hp:
#             person.hp = 0
#             print('%s血量为0,game over'%person.name)
#         else:
#             print('%s掉了%s点血,还剩%s点血' % (person.name, person.ad, person.hp - self.ad))
#
# alex = Person('alex','男',50,2)
# egon = Person('egon','女',60,5)
# taibai = Dog('taibai','taidy',60,90)
# # taibai.bite(egon)
# alex.attack(taibai)            #用对象直接调用类中的方法,省掉再传对象参数给self的麻烦。
#对象调用类中的属性:
#类中的属性存在类开辟的内存空间中,其它各个对象会自动产生一个变量指针指向类的内存地址,调用的时候直接根据指针来查找即可。
# class Test:
#     country = 'china'
#     lis = ['span']
#
# obj = Test()         #创建了一个不带参数的对象。
# print(obj.country)   #此处便是对象通过指针在类中找到的属性。
# obj.country = 'England' #表示在对象本身的内存空间中增加一个country属性,并不改变类中的属性。
# print(obj.country)
# obj.lis = ['Japan']
# obj.lis[0] = 'England'   #改变属性时,对象会先在自己的内存空间找是否存在这个属性,如果有,则改变,如果没有则去类中找。
# print(obj.lis)            #obj中刚刚创建了lis属性,所以改变的是自己。
# obj.lis[0] = 'England'    #如果没有lis这个属性,此处改的便是类中的属性。
# print(obj.lis)
# print(Test.lis)
#总结:静态属性是所有对象共享的,所以如果要修改静态属性,最好用类直接修改最准确
#类名一般用来:查看或修改静态属性。
#              实例化对象
#对象名一般用来:查看或修改对象的属性
#                调用方法
View Code

 

一、面向对象

 

posted @ 2018-05-24 15:52  消暑酸梅粉  阅读(64)  评论(0编辑  收藏  举报