什么是面向对象编程???
一.类和对象
1.1 类的定义
用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。比如:人类(具有相同的属性–如眼睛、鼻子等和方法–生命活动等)、猫类(不同品种的猫,比如说英短、美短、布偶猫等,都具有相同的属性和“方法”,所以可以归为猫类。)
1.2 对象的定义
具有数据属性和函数属性的集合体。如在类中提到的猫类中的英短、美短、布偶猫都可以看作是猫这个类的对象。
1.3 面向对象中的其他概念??
二.定义类
2.1 基本结构
(1)使用class关键字定义类,类名的首字母大写【如class Student】
(2)_ init _是一个特殊的方法(方法–类中的函数),用于创建对象时进行初始化操作
【如:def _ _init _ (self,name,age):
通过这个方法( init _)可以为学生绑定name和age两个属性
】
(3)方法里面的self代表的是当前类的实例化后的对象(并不是只有self,也可以用其他的,但self比较规范)
class Student(object):
def __init__(self,name,grade,age):
self.name=name
self.grade=grade
self.age=age
def study(self,course_name):
print("%s正在学习%s."%(self.name,self.course_name)) #这里course_name 不能写成self.course_name;不然会报错
#AttributeError: 'Student' object has no attribute 'course_name'(self.course_name)报错!
#原因:要写self.是因为在初始化中,定义了这个属性,而这里的course_name不是初始函数定义的
def student_information(self):
print("%s,%d岁,为%d年级的学生!"%(self.name,self.age,self.grade))
def main():
stu1=Student('Anne',10,18) #实例化类,生成一个对象(self)→stu1
stu1.study("Python")
age_anne=stu1.age
print("%s的年龄为%d岁!"%(stu1.name,age_anne))
stu1.student_information()
if __name__ == '__main__':
main()
#Anne正在学习Python.
#Anne的年龄为18岁!
#Anne,18岁,为10年级的学生!
2.2 属性和方法???
2.3 构造器???
2.4 析构器???
2.5 _ _str _ _ 方法???
三.使用对象
3.1创建对象–实例化对象
类在定义后必须先实例化才能使用。类的实例化与函数调用类似,只要使用类名加圆括号的形式就
可以实例化一个类。
类实例化后会生成一个对象。一个类可以实例化成多个对象,对象与对象之间并不会相互影响。类
实例化后就可以使用其属性和方法等。
3.2 给对象发送消息–调用类属性和方法
调用属性:object.属性名
调用方法:object.方法名()
注意: 类里面的变量 称之为属性 类里面的函数 称之为方法
当我们定义好一个类之后,通过如下方法可以创建对象并给对象发消息(调用类属性和方法)。
def main():
#创建学生对象并指定姓名和年龄
stu1=Student('Anne',18)
#给对象发study消息
stu1.study('Python程序设计') #Anne正在学习Python程序设计.
#给对象发观看消息
stu1.watch_movie() #Anne只能看234.
stu2=Student('Bob',12)
stu2.study('思想品德') #Bob正在学习思想品德.
stu2.watch_movie() #Bob只能看123.
if __name__ == '__main__':
main()
四.面向对象的四大支柱
4.1 抽象?
4.2 封装?
4.3 继承?
4.4 多态?
五.基础练习
5.1定义时钟类
定义一个类描述数字时钟。
(用类来定义一个数字时钟,这个时钟会随着时间的推移而变化)
在这里插入代码片from time import sleep
class Clock(object):
#初始化操作,通过这个方法为Clock这个类绑定了三个属性,分别是:hour、minute、second
def __init__(self,hour,minute,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 show(self):
#时间显示
print("%02d:%02d:%02d"%(self.hour,self.minute,self.second))
def main():
clock=Clock(8,16,20) #使用对象;实例化类--创建对象
while True: #一直运行
clock.run() #使用对象;给对象发消息--调用类的方法
sleep(1) #每隔一秒显示
clock.show() #使用对象;调用类的方法
if __name__ == '__main__':
main()
5.2定义距离类
定义一个类描述平面上的点随机移动到某个点之后,两点之间的距离。
import random
from math import sqrt
class Distance(object):
def __init__(self,x=0,y=0):
self.x=x
self.y=y
def pri_distance(self):
print("初始距离为:%2f"%(sqrt(self.x**2+self.y**2)))
def move_to(self):
"随机移动后的位置"
ran_x=random.randint(0,100)
ran_y=random.randint(0,100)
print("随机移动后,x=%d,y=%d"%(ran_x,ran_y))
delta_x=abs(ran_x-self.x)
delta_y=abs(ran_y-self.y)
print("随机移动后的距离为:%2f"%(sqrt(delta_x**2+delta_y**2)))
def main():
distance=Distance(3,4)
distance.pri_distance()
distance.move_to()
if __name__ == '__main__':
main()
待补充…
学习网址:Python-100-Days