DAY08-面向对象编程基础
2019-10-31
1.什么是类?
类 在我们生活中常常有说鸟类,鱼类等.在前面我们说如果有重复的代码可以通过在函数中传递参数值的不同减少我们重复的工作量.但是如果对于很多对象,可能有一部分功能是相同的,但是有部分特性又是另外的独自有的.我们可以封装成为一个类然后继承类中部分方法也可以很好的省略了代码.简而言之,定义类为用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 以下图来自菜鸟教程中面向对象技术的解释:
2.类的实例
类与类的关系有完全继承,有部分继承.完全继承是指直接继承类中的所有方法,部分继承可以有对该父类的部分方法的改写
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称 self参数的名称在调用的时候不需要给它传值, 按照惯例它的名称是 self,也就是所self其实可以换成其他的名字. 第一种方法__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
如果为继承类的关系,就如下面的定义类的方法:
class 派生类名
(基类名
):
方法名
(self
)
如果在子类中需要父类的构造方法就需要显式地调用父类的构造方法,或者不重写父类的构造方法。 参考资料:https://www.runoob.com/w3cnote/python-extends-init.html 第一种:直接继承父类中的_init_方法 第二种:完全重写该方法 第三种:继承该方法,又需要重写它,可以调用super 具体用法:
super(Son,self) 首先找到 Son 的父类(就是类 Father),然后把类 Son 的对象转换为类Father 的对象
class Son(Father
):
def __init__(self
, name
):
super(Son
, self
).__init__
(name
)
super().方法名
(参数
[除self以外
]) :
以下程序参考自:https://blog.csdn.net/jackfrued/article/details/79545466
2.1 定义学生类
"""定义人类"""
class Person():
def __init__(self
, name
, age
):
self
._name
= name
self
._age
= age
def name(self
):
return self
._name
def age(self
):
return self
._age
def age(self
, age
):
self
._age
= age
def play(self
):
print('%s正在愉快的玩耍.' % self
._name
)
def watch_av(self
):
if self
._age
>= 18:
print('%s正在玩游戏.' % self
._name
)
else:
print('%s只能观看<熊出没>.' % self
._name
)
"""学生"""
class Student(Person
):
def __init__(self
, name
, age
, grade
):
super().__init__
(name
, age
)
self
._grade
= grade
def grade(self
):
return self
._grade
def grade(self
, grade
):
self
._grade
= grade
def study(self
, course
):
print('%s的%s正在学习%s.'% (self
._grade
, self
._name
, course
))
"""老师"""
class Teacher(Person
):
def __init__(self
, name
, age
, title
):
super().__init__
(name
, age
)
self
._title
= title
def title(self
):
return self
._title
def title(self
, title
):
self
._title
= title
def teach(self
, course
):
print('%s%s正在讲%s.' % (self
._name
, self
._title
, course
))
def main():
stu
= Student
('王大锤', 15, '初三')
stu
.study
('数学')
stu
.watch_av
()
t
= Teacher
('骆昊', 38, '老叫兽')
t
.teach
('Python程序设计')
t
.watch_av
()
if __name__
== '__main__':
main
()
初三的王大锤正在学习数学
.
王大锤只能观看
<熊出没
>.
骆昊老叫兽正在讲Python程序设计
.
骆昊正在玩游戏
.
2.2定义时钟类
import time
class Clock(object):
"""
数字时钟
"""
def __init__(self
, hour
=0, minute
=0, second
=0):
"""
构造器
:param hour: 时
:param minute: 分
:param second: 秒
"""
self
._hour
= hour
self
._minute
= minute
self
._second
= second
def run(self
):
"""走字"""
self
._second
+= 1
if self
._second
== 60:
self
._second
= 0
self
._minute
+= 1
if self
._minute
== 60:
self
._minute
= 0
self
._hour
+= 1
if self
._hour
== 24:
self
._hour
= 0
def __str__(self
):
"""显示时间"""
return '%02d:%02d:%02d' % \
(self
._hour
, self
._minute
, self
._second
)
def main():
ctime
=time
.localtime
(time
.time
())
clock
= Clock
(ctime
.tm_hour
,ctime
.tm_min
,ctime
.tm_sec
)
while True:
print(clock
)
time
.sleep
(1)
clock
.run
()
if __name__
== '__main__':
main
()
程序结果:
19:50:32
19:50:33
19:50:34
19:50:35
19:50:36
2.3定义图形类
做了一个简单的
class Geometry():
def __init__(self
,name
,perimeter
,area
):
self
.name
=name
self
.perimeter
=perimeter
self
.area
=area
def struct(self
,name
,perimeter
,area
):
print("name is %s,perimeter is %d,area is %d"%(name
,perimeter
,area
))
class Square(Geometry
):
def __init__(self
,a
,name
):
self
.a
=a
self
.name
=name
def perimeter(self
,a
):
return 4*a
def area(self
,a
):
return a
*a
def main():
S
=Square
(4,"正方形")
perimeter
=S
.perimeter
(4)
area
=S
.area
(4)
S
.struct
("正方形",perimeter
,area
)
if __name__
== '__main__':
main
()