初识面向对象:
1.面向过程:
一切一以事物的流程为核心,核心是"过程" 二字,过程是指解决问题的步骤.
优点:负责的问题流程化,编写相对简单
缺点:可扩展性差
2.面向对象 :
一切以对象为中心
优点:可扩展性强
缺点:编程的复杂性高于面向对象
3.面向对象如何编写:
在代码中定义一个类
4. 什么是类:
具有相同属性和方法的一类事务(框架 模子)
而是规范了一类物体有哪些共同的属性和方法(技能)
5.在类中直接可以定义的内容:
静态属性 : 这个类拥有的,所有的对象都共享的属性
动态属性 : 方法\定义在类中的函数,描述的是所有对象共享的行为
6.类名的作用:
实例化的时候 对象 = 类名()
操作静态属性
7, 定义类的关键字 : class 类名首字母大写
1 class 类名: #在代码中定义一个类
2 pass
8.什么是对象:
调用模子得到的结果 : 对象(具体的)
根据模子的规范,填上具体的值就是一个对象了
9.对象名的作用:
操作对象的属性
调用方法
1 class Person: # 定义一个人类 [Person 人类:po shen] 2 pass 3 alex=person() #alex是一个person类的对象
#每次创建一个新的对象都会有一个新的内存地址,也就是每个对象都拥有自己的内存地址
10.什么是构造方法:
构造方法是创建对象的时候自动调用的
1 class Person: # 定义一个人类 [Person 人类:po shen]
2 def __init__(self,name,sex,hp,mp,ad): #构造方法 本身就存在的内置方法
3 alex=person("alex","不详",10,10,0.1) #self是一块内存空间 一调用person ,self就会自动开辟一块空间
11.什么是属性:
属于对象的值 - 对象属性
12.什么是实例
实例完全和对象是一样的
13..什么是实例化:
是由类创建对象的过程
14..实例化的过程
1.创建一个属于对象的空间
2.将这个空间的地址和参数传递给__init__方法
3.执行init方法
4.将对象的空间返回给对象名
1 class Person: # 定义一个人类 [Person 人类:po shen] 2 def __init__(self,name,sex,hp,mp,ad): #构造方法 3 self.name=name # 属性 属于对象的值 - 对象属性 4 self.sex=sex 5 self.hp=hp 6 self.mp=mp 7 self.ad=ad
alex=person("alex","不详",10,10,0.1) #alex=self
#通过person类创建了一个alex对象或创建了一个alex实例 这个过程叫实例化过程
15.什么是方法:
一个函数,在类当中定义函数,就是方法,方法自带self参数
1 class Person: # 类
2 COUNTRY = '牧师' # 静态属性\类属性 属于类的 所有属于这个类的对象都共同的属性
3 def __init__(self,name,sex,hp,mp,ad):
4 self.name = name # 属性 属于对象的值 - 对象属性
5 self.sex = sex
6 self.hp = hp
7 self.mp = mp
8 self.ad = ad
9 def attack(self): # 一个函数,在类当中定义函数,就是方法,方法自带self参数
10 # 动态属性
16.方法和函数的区别?
函数独立的 不需要传递self
方法是写在类里面的函数 需要传递self
17.什么是对象的属性 :
存储在实例化之后创建的空间中的所有变量都是对象的属性
每一次实例化产生的空间都是独立的,每一个对象都有自己的属性值
18.什么是动态属性:
定义在类中的函数,自带一个self,就是调用这个方法的对象本身
19.什么是静态属性 :
所有的这个类的对象都共有的属性
1 class Person: # 类
2 COUNTRY = '牧师' # 静态属性\类属性 属于类的 所有属于这个类的对象都共同的属性
3 def __init__(self,name,sex,hp,mp,ad):
4 self.name = name # 属性 属于对象的值 - 对象属性
5 self.sex = sex
6 self.hp = hp
7 self.mp = mp
8 self.ad = ad
9 def attack(self): # 一个函数,在类当中定义函数,就是方法,方法自带self参数
10 # 动态属性
11 print('%s发起了攻击'%self.name)
12
13 alex = Person('alex','不详',10,10,0.1)
14 如何调用attack方法?
15 alex.attack() # Person.attack(alex)
20.类与对象的关系:
类是对事物的总结,抽象的概念,类用来描述对象.对象是类的实例化的结果,对象能执行哪些方法,都由类来决定,类中定义了什么,对象就拥有什么
21.面向对象中的self指的是什么?
self:表示当前类的对象. 当前正在执行这个动作的对象
22.属性的增删改查:
1 class Person: # 定义一个人类 [Person 人类:po shen]
2 def __init__(self,name,sex,hp,mp,ad): #构造方法
3 self.name=name # 属性 属于对象的值 - 对象属性
4 self.sex=sex
5 self.hp=hp
6 self.mp=mp
7 self.ad=ad
8 alex=person("alex","不详",10,10,0.1) #alex=self
9
10 查看属性:
11 print(alex.hp)
12 增加属性:
13 alex.level=1
14 print(alex.level)
15 修改属性:
16 alex.hp=9
17 print(alex.hp)
18 删除属性:
19 del alex.level #报错 AttributeError 这属性不存在
print(alex.__dict__) #查看alex的所有属性以一个字典的形式返回
也可以通字典的value的值修改对属性对应的值
alex.__dict__["name"]="alex_ss"
人狗大战:
class Person: # 定义一个人类 [Person 人类:po shen]
def __init__(self,name,sex,hp,mp,ad): #构造方法
属性 self.name=name # 每一个角色都有自己的昵称
self.sex=sex # 每一个角色都有自己的性别
self.hp=hp # 每一个角色都有自己的生命值
self.mp=mp # 每一个角色都有自己的蓝
self.ad=ad # 每一个角色都有自己的攻击力
def attack(self,dog): #方法 [attack 攻击:e tai k]
print('%s攻击了%s'%(self.name,dog.name)) # 人可以攻击狗,这里的狗也是一个对象。
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): # 狗可以咬人,这里的狗也是一个对象。 [bite :咬 bai t]
print('%s咬了%s'% (self.name,Person.name))
Person.hp -= self.ad # 狗咬人,那么人的生命值就会根据狗的攻击力而下降
alex=Person("alex","男",10,80,0.1) #创造了一个实实在在的人alex
haha=Dog("二哈","不详",999,998,) #创造了一只实实在在的狗haha
print("狗的血是%s" %haha.hp) #输出狗的血 999
alex.attack(haha) #alex攻击了狗
print("二哈的血还剩%s" %haha.hp) #狗的血剩 998.9
print("alex的血是%s" %alex.hp) #输出alex的血 10
haha.bite(alex) #狗咬了alex
print("alex的血还剩%s" %alex.hp) #alex的血剩 -988
练习1
1 """
2 1.写一个圆形类
3 描述所有的圆形的 半径 周长 面积
4 半径是属性 参数
5 周长和面积是方法 - 根据半径计算而来的
6 """
7 from math import pi
8 class Circle: #定义了一个圆形类;提供计算面积(area)和周长(perimeter)的方法
9 def __init__(self,radius):
10 self.radius = radius
11
12 def area(self):
13 return pi*self.radius*self.radius
14
15 def perimeter(self):
16 return 2 * pi * self.radius
17
18 circle =Circle(10) #实例化一个圆
19 areal = circle.area() #计算圆面积
20 per1=circle.perimeter()#计算圆周长
21 print(areal,per1) #打印圆面积和周长
练习2
1 """创建⼀个武松. 武松可以打老虎, 杀嫂⼦, 替天行道"""
2 class Haohan:
3 def __init__(self,name,waihao,jineng):
4 self.name=name
5 self.waihao=waihao
6 self.jineng=jineng
7
8 def ganlaohu(self):
9 print("%s,%s在干老虎" % (self.waihao,self.name))
10
11 def shasaozi(self):
12 print("%s,%s在杀嫂子" %(self.waihao,self.name))
13
14 def titianxingdao(self):
15 print("%s,%s在替天行道" %(self.waihao,self.name))
16
17 wusong=Haohan("武松","行者","喝酒")
18 wusong.ganlaohu()
19 wusong.shasaozi()
20 wusong.titianxingdao()
练习3
1 """⽤用⾯面向对象的思维来完成⽤用户登录. """
2 class Account:
3
4 def __init__(self, username, password):
5 self.username = username
6 self.password = password
7
8 def login(self):
9 if self.username == "alex" and self.password == '123':
10 return True
11 else:
12 return False
13
14 acc = Account("alex", "1234")
15 print(acc.login())