#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()
day18面向对象作业
猜你喜欢
转载自www.cnblogs.com/Kingfan1993/p/9550815.html
今日推荐
周排行