Python面向对象上笔记

1.类和对象概念

类相当于一个模板,模板里面有很多的函数。
对象是根据模板创建的实例,通过实例对象执行类里面的函数。

2.定义类和对象

使用class语句创造类
类三要素:名称,属性(相当于人的特征),方法(相当于人的行为)
class Person:
    name='hejiao'#类属性
    age=24       #类属性
    def __init__(self):
        self.name= '何娇' #实例属性
    def eat(self):#实例方法
        print("大口的吃饭")
        pass
    def run(self):
        print("飞快的跑")
        pass
    pass
#创建一个对象,类的实例化
#格式  对象名=类名
hj=Person()
hj.eat()#调用函数
hj.run()
print("{}的年龄是:{}".format(hj.name,hj.age))#填坑的方式

3.实例方法和属性

在类的内部,通过def来定义实例方法
实例方法外的属性为类属性
实例方法内的属性为实例属性

4.__init__方法

数据初始化赋值
#init传参
class People:
    def __init__(self):
        self.name='何娇'
        self.sex='女'
        self.age=24
    def eat(self):
        print('喜欢吃榴莲')
        pass
    pass
w=People()
print(w.name)#直接输出的是默认值何娇
#如果有n个对象被实例化,那么就需要添加很多次这样的属性,比较麻烦
#init传递参数改进
class People:
    def __init__(self,name,sex,age):#初始化方法,在实例化对象的时候,是自动调用init里的值,完成初始化设置
        self.name=name
        self.sex=sex
        self.age=age
    def eat(self,food):
        print(self.name+'喜欢吃'+food)
        pass
    pass
zp=People('张鹏','男生',18)
print(zp.name,zp.sex,zp.age)
zp.eat('香蕉')

5.理解self

1.self指代的就是对象
2.self和对象指向同一个内存地址,可以认为self对对象的引用。
3.self只有在定义类中定义实例方法时才有意义,在调用时不用传入实际参数,而是由解释器自动去指向
4.self名称是可以更改的,可以定义成其他的名字,约定俗成定义为self
class Person:
    def __init__(self,pro,name,food):
        self.pro=pro#实例属性
        self.name=name
        self.food=food
        print('-----init----函数执行')
        pass
    def eat(self):#self本身为对象本身,
        #实例方法
        print('self=%s',id(self))
        print('%s 喜欢吃 %s 专业是 %s'%(self.name,self.food,self.pro))#将实例属性引入实例方法中时,要写成self.实例属性
        pass
    pass
xw=Person('心理学','小王','榴莲') #初始化init的值要放在Person括号内
print('xw=%s',id(xw))
#self的id和xw的id一致,说明self就是xw对象



6.魔法方法 格式 ___xxx___

new和init
new的实例化方法,必须要返回该实例,至少有一个参数是cls代表实例化的类,由python解释器自动提供
init用来做数据的初始化工作,也可以认为是实例的构造方法,用self进行构造
new函数执行要早于init函数
__new__方法用于创建对象并返回对象,当返回对象时会自动调用__init__方法进行初始化。
__new__方法是静态方法,而__init__是实例方法。
def __init__(self):
def __str__(self):  # 将对象转换成字符串对象,测试时,打印对象的信息。
        return ('%s 喜欢吃 %s 专业是 %s'%(self.name,self.food,self.pro))
def __new__(cls, *args, **kwargs):  # 创建对象实例的方法,每调用一次就会得到一个对象。
        print('-----new----函数的执行')
        # new可以用来控制对象的一些属性限定,经常用来做单例模式的时候使用
        return object.__new__(cls)  # 在这里真正创建对象实例
        pass
class Person:
    def __init__(self,pro,name,food):
        self.pro=pro#实例属性
        self.name=name
        self.food=food
        print('-----init----函数执行')
        pass
    def eat(self):#self本身为对象本身,
        #实例方法
        print('%s 喜欢吃 %s 专业是 %s'%(self.name,self.food,self.pro))#将实例属性引入实例方法中时,要写成self.实例属性
        pass
    pass
    def __str__(self):  #将对象转换成字符串对象,测试时,打印对象的信息。
        return ('%s 喜欢吃 %s 专业是 %s'%(self.name,self.food,self.pro))
       pass
   pass
    def __new__(cls, *args, **kwargs):#创建对象实例的方法,每调用一次就会得到一个对象。
        print('-----new----函数的执行')
        #new可以用来控制对象的一些属性限定,经常用来做单例模式的时候使用
        return object.__new__(cls)#在这里真正创建对象实例
        pass
xw=Person('心理学','小王','榴莲') #初始化init的值要放在Person括号内
xw.eat()
print(xw)  #打印字符串对象

7.案例决战紫禁之巅

#双人对战
#决战紫禁之巅两个人物,西门吹雪以及叶孤城
#属性:name 玩家的名字,blood 玩家血量
#方法:tong()捅对方一刀,对方掉血10滴
#     kanren()砍对方一刀,对方掉血15滴
#     chiyao()吃一颗药,补血10滴
#     __str__打印玩家动态


#定义一个类(角色)
import time #导入时间包
class Character:
    def __init__(self,name,blood):
        self.name=name
        self.blood=blood
    def tong(self,enemy):
        enemy.blood-=10
        info='%s捅了%s一刀'%(self.name,enemy.name)
        pass
    def kanren(self,enemy):
        enemy.blood-=15
        input=('%s砍了%s一刀'% (self.name, enemy.name))
        pass
    def chiyao(self):
        self.blood+=10
        input=('%s吃了一颗补血药,增加了10滴血'%(self.name))
        pass
    def __str__(self):
        return '%s还剩%s血量'%(self.name,self.blood)

xmcx = Character('西门吹雪', 100)
ygc = Character('叶孤城', 100)
while True:
    if xmcx.blood<=0 or ygc.blood<=0:
        break
    print('-------西门吹雪捅叶孤城一刀----')
    xmcx.tong(ygc)
    print(xmcx)
    print(ygc)
    print('-------西门吹雪吃药')
    xmcx.chiyao()
    print(xmcx)
    print(ygc)
    print('-------叶孤城捅西门吹雪一刀----')
    ygc.tong(xmcx)
    print(xmcx)
    print(ygc)
    time.sleep(1)
    pass

                
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值