PYTHON学习笔记(六)-- 面向对象

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('游戏结束')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值