一.面向对象 (需要站在上帝的角度进行创建)
1.类 : 具有相同属性和技能的一类事物 (类后面的变量需要首字母大写)
对象:具体类的表现,具体实实在在的一个实例
例如:
人是一个类,张舒文是一个对象
狗是一个类,球球是一个对象
面向对象的例子:
类主要分为两个方面:1.变量部分(静态变量/静态字段)
2.方法部分(函数部分/动态变量)
例如:
class Person:
mind = "有思想"
money = "可以使用货币" =======>这三个部分是静态变量/静态字段
farith = "有信仰"
def __init__(self,name,age,sex,hobby):
self.name = name
self.age = age
self.sex = sex
self.hobby = hobby ===========>这四个def是动态变量(函数/方法)
def.work(self):
print("可以工作")
def.eat(self):
print("可以吃饭")
def.sleep(self):
print("可以睡觉")
p1 = Person("刘某某",22,"女","美食")
p2 = Person("张某某",22,"男","小说")
2.类名的角度
操作类中的静态变量:
1.Person.__dict__[] 查询类中的所有内容 (最好查询所有的,不查单个的内容)
括号里面可以通过key值找到value的值 (这个打印出来的数据类型是字典)
2.万能的点 "." (对类中单个的变量进行增删改查)
(1)例如:
print(Person.mind) =====>打印出来是"有思想" 查
(2)例如:
Person.animal = "高级动物" =======>在静态变量中增加一项 增
print(Person.__dict__) =====>可以查询到那一项有没有被增加到里面
(3)例如:
Person.mind = "无思想" =========如果静态变量中存在mind 则是为它重新赋值 改
(4)例如:
del Person.mind
print(Person.__dict__) =========>查询那一项有没有被删除 删
操作类中的方法: (工作当中基本不用类命去操作)
除了类方法,静态方法,需要类名调用之外,剩下的方法都要对象调用
3.对象的角度
Person() 类名+()过程则是实例化的过程(创建一个对象的过程)
Person() 实例化对象,实例,对象
只要类名+()产生一个对象,自动执行类中的__init__方法
例如:
def __init__(self,name,age,sex,hobby): ========>这个方法叫做构造方法
print(name,age,sex,hobby)
Person("张某某",22,"男","小说") 打印出来的效果是======>张某某 22 男 小说
(1)类名+() 产生一个实例(对象/对象空间/实例空间)
(2)自动执行类中的__init__方法,并且将对象空间传给__init__的self参数
(3)给对象封装相应的属性 (执行具体的__init__代码)
例如:
def __init__(self,name,age,sex,hobby):
self.name = name
self.age = age
self.sex = sex
self.hobby = hobby
操作对象中的静态变量
1.__dict__查询对象空间中所有的内容
2.万能的点 "."
(1)例如:
print(p1.name) =====>刘某某 查
(2)例如:
p1.height = 170
print(p1.__dict__) =======>字典里多了一项身高height 增
(3)例如:
del p1.name
print(p1.__dict__) =======>字典里少了一项name的键值对 删
(4)例如:
p1.age = 23
print(p1.__dict__) ======>将age这一项的值改为23 改
对象操作类中的静态变量:
只能查询
例如: print(p1.mind)
对象调用类中的方法: (工作中通过对象执行类中的方法,而不是通过类名)
例如:
p1.work()
也可以在其他方法中调用属性;
例如:
def func(self):
self.height = 170
p1.func()
print(p1.__dict__)
追加:
内存地址加()可以执行 不过要括号里传个参数
例如:
class Person:
mind = "有思想"
money = "可以使用货币"
faith = "有信仰"
def __init__(self, name, age, sex, hobby,faith):
self.name = name
self.age = age
self.sex = sex
self.hobby = hobby
self.faith = faith
def work(self):
print("%s可以工作,自给自足" % self.name)
def eat(self):
print("可以吃到很多美食")
def language(self):
print("%s可以学习很多语言" % self.name)
def func(self):
faith = "没有信仰"
p1 = Person("刘某某", 22, "女", "吃","无")
p2 = Person("张某某", 22, "男", "看小说","有信仰")
p3 = Person("刘某",23,"女","睡觉","没有")
print(Person.eat(111))
作业:
第一题:
完成下列功能:
1.1创建一个人类Person,再类中创建3个静态变量(静态字段)
animal = '高级动物'
soup = '有灵魂'
language = '语言'
1.2在类中定义三个方法,吃饭,睡觉,工作.
1.3在此类中的__init__方法中,给对象封装5个属性:国家,姓名,性别,年龄, 身高.
1.4实例化四个人类对象:
第一个人类对象p1属性为:中国,alex,未知,42,175.
第二个人类对象p2属性为:美国,武大,男,35,160.
第三个人类对象p3属性为:你自己定义.
第四个人类对象p4属性为:p1的国籍,p2的名字,p3的性别,p2的年龄,p3 的身高.
1.5 通过p1对象执行吃饭方法,方法里面打印:alex在吃饭.
1.6 通过p2对象执行吃饭方法,方法里面打印:武大在吃饭.
1.7 通过p3对象执行睡觉方法,方法里面打印:(p3对象自己的名字)在吃饭.
1.8 通过p1对象找到Person的静态变量 animal
1.9 通过p2对象找到Person的静态变量 soup
2.0 通过p3对象找到Person的静态变量 language
class Person:
animal = "高级动物"
soup = "有灵魂"
language = "语言"
def __init__(self,country,name,sex,age,hight):
self.country = country
self.name = name
self.sex = sex
self.age = age
self.hight = hight
def work(self):
print("%s在工作" % self.name)
def eat(self):
print("%s在吃饭" % self.name)
def sleep(self):
print("%s在睡觉" % self.name)
P1 = Person("中国","alex","未知",42,175)
P2 = Person("美国","武大","男",35,160)
P3 = Person("葡萄牙","C罗","男",33,185)
P4 = Person(P1.country,P2.name,P3.sex,P2.age,P3.hight)
r1 = P1.eat()
r2 = P2.eat()
r3 = P3.sleep()
print(P1.animal)
print(P2.soup)
print(P3.language)
print(P1.__dict__)
print(P2.__dict__)
print(P3.__dict__)
print(P4.__dict__)
第二题:
通过自己创建类,实例化对象
在终端输出如下信息
小明,10岁,男,上山去砍柴
小明,10岁,男,开车去东北
小明,10岁,男,最爱大保健
老李,90岁,男,上山去砍柴
老李,90岁,男,开车去东北
老李,90岁,男,最爱大保健
老张…
class Person:
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
def work1(self):
print("%s,%s.%s,上山砍柴去" % (self.name,self.age,self.sex))
def work2(self):
print("%s,%s,%s,开车去东北" % (self.name,self.age,self.sex))
def work3(self):
print("%s,%s,%s,最爱大保健" % (self.name,self.age,self.sex))
P1 = Person("小明","10岁","男")
P2 = Person("老李","90岁","男")
r1 = P1.work1()
r2 = P1.work2()
r3 = P1.work3()
r4 = P2.work1()
r5 = P2.work2()
r6 = P2.work3()
第三题:
模拟英雄联盟写一个游戏人物的类(升级题).
要求:
(1)创建一个 Game_role的类.
(2) 构造方法中给对象封装name,ad(攻击力),hp(血量).三个属性.
(3) 创建一个attack方法,此方法是实例化两个对象,互相攻击的功能:
例: 实例化一个对象 盖伦,ad为10, hp为100
实例化另个一个对象 剑豪 ad为20, hp为80
盖伦通过attack方法攻击剑豪,此方法要完成 '谁攻击谁,谁掉了多少血, 还剩多少血'的提示功能.
class Game_role:
def __init__(self,name,ad,hp):
self.name = name
self.ad = ad
self.hp = hp
def attack(self,p):
p.hp = p.hp - self.ad
print("%s攻击了%s,%s掉了%s血,还剩%s血" % (self.name,p.name,p.name,self.ad,p.hp))
P1 = Game_role("盖伦",10,100)
P2 = Game_role("剑豪",20,80)
r1 = P1.attack(P2)