面向对象基础(OOP)(object-oriented programming)
面向过程:根据业务逻辑从上到下写代码
函数式:将某功能代码封装导函数中
面向对象编程:将数据与函数绑定在一起,进行封装
类和对象
类:是一个模板,模板里面有很多函数 是具有一组相同或者相似属性和方法的一系列对象的集合
类:类名,类的属性,类的方法
对象:是实实在在的东西,是类的实例化
#采用大驼峰法
class Person:
name = 'Charlie' 类属性 直接归属类所有
age = 18
def eat(self): **实例方法** 在类的内部,类的外部是普通方法 【self表示可以是其他名字,但是这个位置必须被占用】
def __init__(self):
self.name='xiaoming' 实例属性
定义在方法里面,用self引用的属性是实例属性
print('大口大口吃饭')
pass
def run(self):
print('跑')
pass
shi = Person() #创建一个对象
shi.eat()
print(shi.name,shi.age)
init 方法
class People:
#初始化的方法,是由系统实例化直接就调用了,完成初始化功能
def __init__(self): #实例属性的声明
self.name='小明'
self.sex = 'Male'
self.age = 18
def eat(self):
print('喜欢吃榴莲')
xq = People()
print(xq.name) #输出的是定义的默认值
xq.name = 'sss' #可以修改
print(xq.name)
class People:
def __init__(self,name,sex,age):
self.name = name
self.sex = sex
self.age = age
def eat(self,food):
print(self.name + '喜欢吃' + food)
#不同对象可以传入不同的特征值
xq = People('Charlie','Male',18)
print(xq.name)
xq.eat('banana')
self概念
self:self和对象指向同一个内存地址,就是对象的引用
会把对象自己传递到self这个参数
class Person:
def __init__(self,name,food):
self.name = name
self.food = food
def __str__(self):
return '%s 爱吃 %s'%(self.name,self.food)
def __new__(cls,*args,**kwargs): #是第一个进行的,然后去进行init,把对象返回
#经常用来做单例模式的时候来使用
#创建对象实例的方法,每调用一次就会生成一个新的对象 cls就是class的缩写
return object.__new__(cls)
xw = Person('hh','苹果')
print(xw)
import time
class Role:
def __init__(self,name,hp):
#角色的名字和血量
self.name = name
self.hp = hp
def tong(self,enemy):
#enemy是敌人
enemy.hp-=10
info='%s捅了%s一刀'%(self.name,enemy.name)
print(info)
def kanren(self,enemy):
enemy.hp-=15
info='%s砍了%s一刀'%(self.name,enemy.name)
print(info)
def chiyao(self):
self.hp+=10
info='%s吃了一颗补血药,增加10滴血'%(self.name )
print(info)
def __str__(self):
return '%s 还剩下 %s 的血量'%(self.name,self.hp)
r1 = Role('西门春雪',100)
r2 = Role('叶孤城',100)
while True:
if r1.hp<=0 or r2.hp<=0:
break
r1.tong(r2)# r1桶r2
print(r1)
print(r2)
print('******************')
r2.tong(r1)
print(r1)
print(r2)
print('******************')
r1.chiyao()
print(r1)
print(r2)
time.sleep(1) #休眠1秒
print('对战结束')