day18面向对象作业

#1.简述编写类和执行类中方法的流程
# 编写类过程:
#         1、 class +类名+:例如 class Animal:
#         2、 变量表示静态属性 列如 rolr = 'animal'
#         3、为实例化对象初始属性(对象不需要属性可不写):
#             def __init__(self,name,language):
#                 self.name = name
#                 self.language = language
#         4、添加类的方法,方法又函数组成,可以多个:
#             def walk(self):
#                 pass
#             def eat(self):
#                 pass
# 执行类中方法流程:
#     1、实例化对象,例:obj = Animal('Tom','喵语')
#     2、调用类中方法格式:对象+.+函数名+():
#         obj.eat()


#2简述面向对象的三大特征
# 1、继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类
# ,新建的类称为派生类或子类,python中类的继承分为:单继承和多继承
#2、多态:多态指一类事物可能会有多种形态,在指定的形态下但都有相同的方法只是可能执行的内容有所不同
#3、封装: 隐藏对象的属性和实现细节,仅对外提供公共访问方式。


#3将以下函数改成类的方式并调用:
# def func(a1):
#     print(a1)
# class A:
#     def func(self,x):
#         print(x)
# obj = A()
# obj.func(1)


#4方法和函数的区别
# 方法只能通过实例化的对象或者类本身调用,而函数可以通过函数名加()的方式直接调用


#5什么是构造方法:
#在类中构造方法不同于其他方法,在一个对象被创建后会自动调用构造方法,
# 并将构造方法中的属性添加到对象中


#6
#在类实例化的过程,会先开辟一个空间,并将对象空间自动传给self,所有self是对象空间地址


#7以下代码体现面向对象在内存中存储的什么特点:
# class Person:
#     def __init__(self,name,age,gender):
#         self.name = name
#         self.age = age
#         self.gender = gender
# obj = Person('孙福来',18,'女')
# 1,在内存中开辟了一个对象空间
# 2,自动执行类中的__init__方法,并且将对象空间自动传给self参数,其他参数手动传入。
# 3, 执行__init__方法 给对象空间封装相应的属性。


#8以下代码体现面向对象中的方法在内存中存储的什么特点
# class Message:
#     def email(self):pass
#     def msg(self):pass
#     def wechat(self):pass
#创建一个类就会创建一个类名称空间,用来存储类的静态属性和方法,只有在实例化对象并对象引用方法后,类的方法才会被执行。


#9
# class Foo:
#     def func(self):
#         print('foo.func')
#
# obj = Foo()
# result = obj.func()
# print(result)


#程序分析:类Foo实例化出一个对象obj,
# obj调用类Foo func方法并打印'foo.func'
# result接收的为函数运行结果无返回值以打印None
#运行结果:'foo.func'
#         None


#10
# from math import pi     #导入π
# class Cricle:
#     def __init__(self,radius):  #初始化半径属性
#         self.radius = radius
#     def count_area(self):       #计算面积并返回
#         return pi*(self.radius**2)
#
#     def count_perimeter(self):  #计算周长并返回
#         return 2*pi*self.radius
# Cricle1 = Cricle(10)
# area = Cricle1.count_area()
# perimeter = Cricle1.count_perimeter()
# print(area,perimeter)


#11面向对象中为什么要有继承
#当我们创建有一个新类时,发现这个类和我们已有的类的属性和方法有绝大部分的相同点,
#就没必要重新写一个类来增加重复代码,所以通过继承的方式继承已有类的属性和方法


#12、python多继承时,查找成员的顺序遵循什么规则
#当类是新式类时遵循广度优先原则
#当类是经典类时遵循深度优先原则


#13 看代码写结果:
# class Base1:
#     def f1(self):
#         print('base1.1')
#     def f2(self):
#         print('base1.f2')
#     def f3(self):
#         print('base2.f3')
#         self.f1()
# class Base2:
#     def f1(self):
#         print('base2.f1')
# class Foo(Base1,Base2):
#     def f0(self):
#         print('foo.f0')
#         self.f3()
# obj = Foo()
# obj.f0()
#结果:foo.f0 base2.f3 base1.1
#解释:
#obj.f0()先会在Foo类中找f0方法并执行print('foo.f0'),
#然后执行self.f3(),会在Foo中找f3方法没找到然后去Base1中去找执行f3方法
#打印print('base2.f3'),然后执行self.f1此时self还是指向的Foo所以先会去Foo
#中找f1方法,没找到再去Base1中找并执行f1方法


#14看代码写结果
# class Base:
#     def f1(self):
#         print('base.f1')
#     def f3(self):
#         self.f1()
#         print('base.f3')
# class Foo(Base):
#     def f1(self):
#         print('foo.f1')
#     def f2(self):
#         print('foo.f2')
#         self.f3()
# obj2 = Base()
# obj2.f2()
#运行结果:报错
#分析:
#obj2是Base类实例化出的对象,obj2.f2()会在Base类中查找f2方法,
# 没找到则会报错因为父级不能调用子级方法


#15补充代码实现:
# import re
# class StaffEmail:
#     count = 0
#     def __init__(self,name,email):
#         StaffEmail.count += 1
#         self.name = name
#         self.email = email
#     def staff_email_info(self):
#         msg = '我叫{},邮箱是{}'.format(self.name,self.email)
#         return msg
# user_list = []
# while True:
#     user = input('请输入用户名:').strip()
#     pwd = input('请输入密码:').strip()
#     while 1:
#         email = input('请输入邮箱:').strip()
#         str = r'^[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+){0,4}@[a-zA-Z0-9_-]' \
#               r'+(\.[a-zA-Z0-9_-]+){0,4}$'
#         if re.match(str, email):break
#         print('邮箱格式错误,请重新输入')
#     user_info_obj = StaffEmail(user,email)
#     user_list.append(user_info_obj)
#     if StaffEmail.count %3==0:
#         break
# for i in user_list:
#     print(i.staff_email_info())


#16.补全代码:实现用户注册和登录
# class User:
#     def __init__(self,name,pwd):
#         self.name = name
#         self.pwd = pwd
# class Account:
#     def __init__(self):
#         self.user_list = []
#     def login(self):
#         n = 3
#         while n:
#             user = input('请输入用户名:').strip()
#             pwd = input('请输入登录密码').strip()
#             for i in self.user_list:
#                 if i.name == user and i.pwd == pwd:
#                     print('登录成功')
#                     return
#             else:
#                 n-=1
#                 print('用户名或密码错误,还有%s次机会'%n)
#     def register(self):
#         while 1:
#             user = input('请输入注册用户名:')
#             for i in self.user_list:
#                 if user ==i.name:
#                     print('用户名已存在请重新输入')
#                     break
#             else:
#                 pwd = input('请输入注册密码:')
#                 user_info = User(user,pwd)
#                 self.user_list.append(user_info)
#                 print('注册成功')
#                 break
#     def run(self):
#         self.register()
#         self.register()
#         self.login()
# if __name__ =='__main__':
#     obj = Account()
#     obj.run()

猜你喜欢

转载自www.cnblogs.com/Kingfan1993/p/9550815.html
今日推荐