文章目录
一、python面向对象与模块思维导图
二、补充说明:对象的属性和方法
1、属性的概念
属性就是展示对象的形态,比如学生是一个对象,学生的名字,学生的年龄,学生的性别,学生的成绩都是属性,它描述了学生这个对象具有什么特征
2、方法的概念
方法其实跟函数我觉得是差不多的,他更多的表现的是一种操作,或者说是对象的一种行为,比如学生打架 ,学生学习了
3、实例理解
这里创建一个类和对象:
#创建类
class Hero(object):
def move(self):
print("发起了攻击")
#创建对象,对象名 = 类名
super_hero= Hero()
现在给对象赋予属性,名字,攻击力,生命值
#给对象添加属性和相对应的属性值
hero.name = "将军" #名字
hero.hp = "1000" #生命值
hero.attack = "700" #攻击力
然后我们获取它的属性值,看一下有没有给它添加成功:
然后我们试着使用有了具体对象后的方法
这是总的代码,第一步我们创了类,第二步我们创建了对象,第三步给对象添加了属性,然后我们验证了这个属性并调用了实例化后的方法。def move(self)里面的self其实就是对象自己的引用作为值传递了进去,我们还可以把获取对象属性值那一步精简一下,变成下面这样:
class Hero(object):
def move(self):
print("发起了攻击")
def base(self):
print("人物 %s 的生命值剩余 %d , 攻击力 %d" % (hero.name,hero.hp,hero.attack))
#创建对象,对象名 = 类名
hero = Hero()
#给对象添加属性和相对应的属性值
hero.name = "将军" #名字
hero.hp = 1000 #生命值
hero.attack = 700 #攻击力
#获取对象的实例方法
hero.base()
hero.move()
运行结果是一样的
4、init方法
- 概念:无需任何操作,类创造对象时自动执行相关的代码
- 无参数情况下:
- 有参数情况下,直接在__init__里面添加参数,然后对其赋值初始化,增加属性
三、补充说明:继承的种类
1、单继承
还是用上文的例子举例
class Hero(object): #父类
def __init__(self,name,hp,attack):
self.name = name
self.hp = hp
self.attack = attack
print("%s 的生命值有剩余 %d,武力值为 %d" % (self.name,self.hp,self.attack))
print("被打败了")
class City_hero(Hero): #子类,没有对父类作什么改变,就是单纯的继承,而且只继承了一个父类Hero
pass
hero = City_hero('将军',1000,700)
2、多继承
当子类比较贪心,一次性继承多个父类(这里写了两个父类的实例)时。如果父类的方法命名时相同的,那么调用的时候肯定会出现冲突,也就是说,你也叫张三,我也叫张三,是给你叫还是给我叫:
class Hero(object): #第一个父类
def __init__(self):
self.name = "将军"
def me(self):
print("%s" % (self.name))
def bad(self):
print("被打败了")
class Person(object): #第二个父类
def __init__(self):
self.name = "敌方将军"
def me(self):
print("%s" % (self.name))
def result(self):
print("打赢了")
class City_hero(Hero,Person): #子类,继承了2个父类
pass
hero = City_hero()
hero.me()
最终结果是输出了将军,也就是执行了 City_hero(Hero,Person)中的hero的init方法,可以总结继承多个父类,产生冲突时,执行第一个父类的方法
我们修改一下代码
执行出来了这样一个结果,hero.bad,hero.result,两个父类的内容都输出了,因为他们之间没有产生冲突
四、补充说明:模块之自定义模块
1、自定义模块的定义、创建
举自己写的一段代码进行梳理:
__all__ = ["today", "tomorrow"] #如果使用from mod import *,就只能执行today和tomorrow这两个函数
today = 12
def tomorrow():
print("加油")
class Hero(object):
def __init__(self,name):
self.name = name
print("%s 的生活多姿多彩" % self.name)
if __name__ == '__main__': #假如这个模块直接被运行而不是调用,它就会执行接下来的代码块,如果是模块被导入了,那就不执行下面这个代码块
tomorrow()
2、保存自定义功能模块,以jupyter Notebook为例
- 对代码文件进行重命名
- 保存下载代码文件为.py文件
3、将代码文件放在和接下来的代码文件一个文件夹内
4、import模块,检验功能