面向对象编程基础
2018-03-17 本文已影响0人
jealousl
面向对象思想有三大要素:
1.封装
2.继承
3.多态
类和对象
所谓的类便是对象的蓝图,对象是类的实例。类就像将某些事物的相同属性和行为提取出来使用关键字class
定义。
定义类
Python使用关键字来定义类,将函数定义在类中就成为类中的方法,例子如下:
class Student(object):
def __init__(self, name, age): # 数据初始化
self._name = name
self._age = age
# 在定义属性的时候我们可以个它增加属性的访问器和修改器例如:
@property # 属性访问器
def age(self):
return self._age
@age.setter # 属性修改器
def age(self, age):
self._age = age if 15 < age < 25 else 20
def watch_av(self):
if self._age >= 18:
print('看片')
else:
print('看动漫')
定义一个类之后我们就可以使用类中的方法
def main():
stu1 = Student('ljl', 18) # 创建学生对象
stu1.study('Python程序设计') # 给对象发study消息
stu1.watch_av() # 给对象发watch_av消息
stu2 = Student('王大锤', 16)
stu2.study('英语')
stu2.watch_av()
if __name__ == '__main__':
main()
访问可见性
Python之中没有访问的限制,无论你怎么定义,只要别人知道你所定义的格式那么他就可以使用你所想要保护的属性。例如:
class L:
def __init__(self, f):
self.__f = f
def __b(self):
print(self.__f)
print('__b')
def main():
l = L('hello')
l._L__b()
print(l._L__f)
if __name__ == "__main__":
main()
练习
1.计时器
import time
class Rectangle:
def __init__(self, width, height):
self._width = width
self._height = height
def perimeter(self):
return (self._width + self._height) * 2
def area(self):
return self._height * self._width
class Clock(object):
def __init__(self, hour=0, minute=0, second=0):
# 不要参数 使用系统时间 python中的time模块
# 倒计时钟 指定一个时间 时间为0则提醒用户
# 猜数字
# 奥特曼打小怪兽
# 定义一个类描述平面上的一个点 可以移动到某一个点 移动了多少 一个点到另外一个点距离
self._hour = hour
self._minute = minute
self._second = second
def run(self):
self._second += 1
if self._second == 60:
self._minute += 1
self._second = 0
if self._minute == 60:
self._minute =0
self._hour += 1
if self._hour == 24:
self._hour =0
def show(self):
return '%02d:%02d:%02d' % (self._hour, self._minute, self._second)
# 下面的方法可以获得对象的字符串表示形式
# 当我们用print打印对象时候会自动调用该方法
def __str__(self):
return '%02d:%02d:%02d' % (self._hour, self._minute, self._second)
def display(self):
while True:
if self._second < 59:
self._second += 1
else:
self._second = 0
if self._minute < 59:
self._minute += 1
else:
self._minute = 0
if self._hour < 23:
self._hour += 1
else:
self._hour = 0
time.sleep(1)
return str(self._hour) + ':' + str(self._minute) + ':' + str(self._second)
def main():
s1 = Rectangle(10, 5)
print(s1.area())
print(s1.perimeter())
# d1 = Clock(22, 59, 55)
# while True:
# print(d1.display())
clock = Clock()
while True:
print(clock.show())
clock.run()
time.sleep(1)
if __name__ == '__main__':
main()
2.倒计时
# 倒计时钟 指定一个时间 时间为0则提醒用户
import time
class Count_down(object):
def __init__(self, hour, minute, second):
self._hour = hour
self._minute = minute
self._second = second
def remind(self):
if self._hour == 0 and self._minute == 0 and self._second == 0:
return False
elif self._second == 0:
if self._minute == 0:
self._hour -= 1
self._minute = 59
self._second = 60
else:
self._minute -= 1
self._second = 60
self._second -= 1
return True
def show(self):
return '%02d:%02d:%02d' % (self._hour, self._minute, self._second)
def main():
c = Count_down(0, 0, 5)
while c.remind():
print(c.show())
time.sleep(1)
print('时间到,请离开考试的位置')
if __name__ == '__main__':
main()