附:课程链接
第二讲.Python语法串讲
2.7.类、对象、面向对象的编程`
由于个人使用Win7系统,并未完全按照课程所讲,以下记录的也基本是我的结合课程做的Windows系统+python3.70操作。且本人有python基础,故一些操作可能简略。
由于本节课涉及运行python代码,故利用PyCharm。并未完全按照网课。
记住编写代码时,除注释内容外,字符均使用英文格式。
python中最难的一部分。
一、类
1、类:函数的集合、可实例化出对象的模具、具有共性的一类事物的统一描述。
2、实例化:一种格式:对象 = 类() 例如:t = turtle.Pen()。turtle是引入的一个模块,Pen是turtle里的一个类,t是对象。
3、对象:类实例化出的实体,对象真实存在,完成具体工作。
4、面向对象的编程:程序员反复优化类,拓展类的函数,再把优化好的类实例化出对象,用对象调用类里的函数执行具体的操作。
5、举例:
①上面的类是下面类的父类;下面类是上面类的子类。
图中:猫是哺乳动物的子类,哺乳动物是动物的子类。
②类在命名时第一个字母通常大写,例如Animals、Mammals、Cats。
③每个类对应的为其功能,例如哺乳动物可呼吸、移动、吃东西,在计算机中用函数来表述这些功能。
④类具有继承关系。子类将具备自身和父类的功能。即,子类实例化出的对象,可以使用自身和父类的函数与变量。
6、类的定义(如果没有父类,则可以不写):
代码验证:
pass占位起架构的作用,后面可用具体的函数代替pass。
类在定义函数时,语法规定第一个参数必须是self。(在PyCharm中自动显示self)
__init__
(注意是 “两个下划线”+init+“两个下划线”)函数,在新对象实例化时会自动运行,用于给新对象赋初值。
【在网课中是__Init__,但是在实际编程中出现了报错:taks no arguments,经过检查发现应该是__init__,可能和实际版本有关,我使用的版本较新,为了适用未来的发展,建议大家使用较新版本】
class Animals:
def breathe(self):
print("breathing")
def move(self):
print("moving")
def eat(self):
print("eating food")
class Mammals(Animals):
def breastfeed(self):
print("feeding young")
class Cats(Mammals):
def __init__(self,spots):
#__init__类实例化时必须首先默认执行的初始化函数,用于给实例化的对象赋初值。
# 比如这里Cats类的__init__函数就要给spots(斑点)赋初值。
# 这样实例化的各个对象就可以在实例化时把斑点的数目赋初值了。
self.spots = spots
def catch_mouse(self):
print("catch mouse")
将猫类实例化为一个叫kitty的对象,kitty有自己的特征属性,比如身上有10个斑点:
kitty = Cats(10)
print(kitty.spots)
结果打印出10:
另外,kitty还可以做具体的工作,比如捉老鼠:
kitty = Cats(10)
print(kitty.catch_mouse())
#对象运行函数,必须用对象.函数名,调用类里的函数
对象调用类里的函数,用对象.函数名
对象调用类里的变量,用对象.变量名
类内定义函数时,如调用自身或父类的函数与变量,须用self.引导,应写为self.函数名或self.变量名
如,让猫再具有跳舞的功能,应拓展猫类:
class Cats(Mammals):
def __init__(self,spots):
#__Init__类实例化时必须首先默认执行的初始化函数,用于给实例化的对象赋初值。
# 比如这里Cats类的__Init__函数就要给spots(斑点)赋初值。
# 这样实例化的各个对象就可以在实例化时把斑点的数目赋初值了。
self.spots = spots
def catch_mouse(self):
print("catch mouse")
def left_foot_forward(self):
print("leftfootforward")
def left_foot_backward(self):
print("leftfootbackward")
def dance(self):
self.left_foot_forward() #调用猫类或父类的函数,用self.函数名
self.left_foot_backward()
self.left_foot_forward()
self.left_foot_backward()
接下来用实例验证:
kitty = Cats(10) #将Cats实例化为kitty对象
print(kitty.spots) #调用kitty猫斑点变量
kitty.dance() #执行kitty猫跳舞函数
kitty.breastfeed() #调用其父类中的函数
kitty.move() #调用其父类中的函数
验证结果: