1.面向对象编程–oop(object oriented programming)
面向过程–思考问题时,首先分析怎么按照步骤实现,然后将问题拆解成若干步骤,并一步步完成功能–怎么做
面向对象–关注的是设计思维,关注顶层设计,不考虑细节究竟如何实现(比如洗车,直接给洗车店,不用管)–给谁做
2.类和对象
类–一个模板,模板中可以有多个函数,并且函数里实现一些功能(造汽车的图纸)----一组相同或相似特征【属性】和行为【方法】的一系列对象组合
组成部分:类名,属性(数据),方法 例:类名:人;属性:身高,体重;方法:吃饭,跑步
对象–根据模板创建的示例,通过实例对象可以执行类中的函数(用图纸造的汽车)----类的实例化
定义:
#定义类和对象 ''' 类结构--类名,属性,方法 class 类名: 属性--类里面定义的变量(类属性) 方法 ''' class Person(object):#object可以省略 #属性-特征 name = 'jey'#类属性 age = 22 ''' **实例属性:** 定义在方法内使用self定义的属性 ''' def __init__(self): self.name = '小明'#实例属性,归实例方法所有 pass #方法-行为 def eat(self): print('我要恰饭啦') pass def run(self): print('跑起来!') pass ''' 对象创建【实例化】 对象名 = 类名() ''' lee = Person() lee.eat()#调用类的方法 print("{}的年龄是{}".format(lee.name,lee.age))3.实例方法 在类的内部,使用def关键字可以定义一个实例方法,不同的是,实例方法必须包含参数self[名字标识可以是其他的名字,只是标识占位],并且是第一个参数. 实例方法归类所有,可以通过类调用
4.init方法–初始化实例属性
class Person(object):#object可以省略 ''' # init -- 定义类时直接定义,(统一设定)其他实例就可以直接调用,不需要一一定义 创建新对象时自动执行 ''' # def __init__(self): # self.name = '小明' # self.sex = '女' # self.age = 20 # pass ''' 也可以通过传参数的方式灵活定义,通过传参的方法定义实例属性 ''' def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex pass #方法也可以传参,并且可以使用self实例属性 def eat(self,food): print(self.name+'我要恰饭啦'+food) pass def run(self): print('跑起来!') pass #添加实例属性 python可以直接通过对象添加实例属性 #如过类里面同一定义过实例属性,也可以通过下列方式修改使用,但只限该对象 # xw = Person(); # xw.name = '小王' # xw.sex = '男' # print(xw.name,xw.sex) #xm = Person(); #print(xm.name) #直接传递参数定义实例属性 zp = Person('帐篷',20,'男') print(zp.name,zp.age,zp.sex) zp.eat('苹果')5.self参数 self和对象指向同一内存地址,可以认为self就是对象的引用。 在某个对象调用其方法时,python解释器会把该对象作为第一个参数传递给self,因此开发者只需要传递后面参数即可
class Person: def eat(self):#self只有在类中定义实例方法时才有意义, # 在调用时不必传入相应参数,而是由解释器自动去指向 print("self=%s",id(self))#打印self的地址 pass pass #实例化一个对象 xw = Person() print('xw=%s',id(xw))#xw=%s 55746600 xw.eat()#self=%s 55746600 #self和对象的地址是一样的,表示将对象作为self参数传递了进去6.魔术方法 一些内置好的特定的方法,方法名为__xxx___,在特定操作时会被调用
#str方法 class Animal: def __init__(self,name,color): self.name = name self.color = color print('定义实例属性') #定义一个str方法,就可以直接打印对象信息 def __str__(self): return '%s是%s色的'%(self.name,self.color) #new方法--创建对象实例的方法,每调用一次,就会生成一个新的对象cls(class的缩写) #new方法是类中第一个使用的方法 #至少有一个参数cls代表要实例化的类 def __new__(cls, *args, **kwargs): print('创建一个方法') return object.__new__(cls)#返回一个新的对象,要返回对象,才可以成功创建对象 pass dog = Animal('旺财','white') #在类没有定义str时 #直接打印的话,打印的是对象的内存地址--<__main__.Animal object at 0x0353A028> #定义了str后,打印对象时就会按照str返回值的格式输出数据 #旺财是white色的 print(dog)7.实例
双人对战:
#双人对战 #属性 #name-姓名 #blood-血量 #方法 #tong()--扣对手10点血 #kanren()--扣对手15点学 #chiyao()--回复自己10滴血 #__str__打印玩家状态 import time#导入时间包,可以设定休眠时间 class Role: def __init__(self,name,hp): self.name = name self.hp = hp pass def tong(self,enemy): enemy.hp-=10 print('%s捅了%s一刀'%(self.name,enemy.name)) pass def kanren(self,enemy): enemy.hp-=15 print('%s砍了%s一刀'%(self.name,enemy.name)) pass def chiyao(self): self.hp+=10 print('%s吃了一口药'%(self.name)) pass def __str__(self): return '%s还有%s血量'%(self.name,self.hp) ygc = Role('叶孤城',100) xmcx = Role('西门吹雪',100) while True: if ygc.hp<=0 or xmcx.hp<=0: break ygc.tong(xmcx) ygc.kanren(xmcx) xmcx.chiyao() print(ygc) print(xmcx) print('*****************') time.sleep(1)#休眠2秒再执行 print('游戏结束')