python面向对象程序设计试题_Python 100天练习 | Day 8 面向对象编程基础

本文以GitHub上100天python从新手到大师为素材,规划为约100天的练习,每次的学习和总结均发在这里。有错误的地方还请朋友们指正。

什么是面向对象编程

根据我粗浅的理解,面向对象编程"把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派。"

封装就是将一切实现的细节隐蔽起来,只给对方一个接口来使用。继承是指我们可以继承类的统一特性,但每个继承下来的新对象都不一样,会有自己的特性,这就是多态。

类和对象

类是对象们的统一,对象是类的具体化。 例如在动物中,狗是类的名字,而柯基、哈士奇就是狗类下的具体例子。当我们把柯基、哈士奇里四足、耳朵形状、叫声等特征行为概括起来时候,狗的类就建立起来了。

创建和使用对象

使用关键字 class 创建类,在里面可以通过属性赋值和函数来赋予类的内容。可以通过下面例子来说明:

其中 init 是特别的方法,用于初始化类的内容,并且我们通过self.name来获取了学生的名字,并以此类推。

class Student(object):

def __init__(self, name, age):

self.name = name

self.age = age

def study(self, course_name):

print("%sis studying%s" % (self.name, course_name))

def watch_movie(self):

if self.age < 18:

print("%s在看熊大" % self.name)

else:

print("%s在看成人才可以看的" % self.name)

在创建好类之后,我们就可以通过类来创建对象,并使用我们在类中存在的方法了。

stu1 = Student('王大锤', 15)

stu1.study('数学')

stu1.watch_movie()

访问可见性问题

在上面的例子中,对象的属性都是公开可访问到的,python中可以在属性和方法前加两个下划线来表示私有。可以看下面的例子:

class Test:

def __init__(self, foo):

self.__foo = foo

def __bar(self):

print(self.__foo)

print('__bar')

def main():

test = Test('hello')

# AttributeError: 'Test' object has no attribute '__bar'

test.__bar()

# AttributeError: 'Test' object has no attribute '__foo'

print(test.__foo)

if __name__ == "__main__":

main()

但如果掌握了方法,私有的属性和方法我们也可以访问到,如下图:

class Test:

def __init__(self, foo):

self.__foo = foo

def __bar(self):

print(self.__foo)

print('__bar')

test = Test('hello')

test._Test__bar()

print(test._Test__foo)

练习

练习1 创建一个电子时钟的类

TIPS: 电子时钟可以现实时间,可以走时间

class Digital_Clcok(object):

def __init__(self, hour, minute, second):

self.hour = hour

self.minute = minute

self.second = second

def run_time(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_time(self):

print("现在时间是:%s||%s||%s" %(self.hour, self.minute, self.second))

clock1 = Digital_Clcok(12,23,56)

clock1.show_time()

clock1.run_time()

练习2:给出一个直角坐标系内的点,可以显示坐标、移动坐标、计算与某一点的距离

from math import sqrt

class Point(object):

def __init__(self, x, y):

self.x = x

self.y = y

def location(self):

print("该点坐标为(%d,%d)" %(self.x, self.y))

def move_to(self, aim_x, aim_y):

self.x = aim_x

self.y = aim_y

print("转移至目标(%d,%d)" %(self.x, self.y))

def distance(self, target_x, target_y):

print("距离目标有%.2f" % sqrt((self.x - target_x) **2 + (self.y - target_y) **2))

point_1 = Point(1, 2)

point_1.location()

point_1.distance(4, 5)

point_1.move_to(4, 5)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值