简述面向对象的三大特性?
封装:将方法封装到类中 或 将数据封装到对象中,以便以后使用
继承:将类中的公共的方法提取到基类中去实现
多态:Python默认支持多态(这种方式称之为鸭子类型),最简单的基础下面的这段代码即可
1
2
3def func(arg):
v1 = arg.copy() # 浅拷贝
print(v1)
将以下函数改成类的方式并调用
1
2def func(a1):
print(a1)1
2
3
4
5
6class Test():
def func(self,a1):
print(a1)
b = Test()
b.func(222)面向对象中的self指的是什么?
self 是一个参数,在通过对象、方法 的方式去执行方法时,这个参数会被python自动传递(值为调用当前方法的对象)
以下代码体现面向对象的什么特性?
1
2
3
4
5
6
7class Person(object):
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
obj = Person('蒙珣',18,'男')体现了封装的特性,将
蒙珣, 18, 男
封装到 obj 对象中以下代码体现面向对象什么特性?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18class Message(object):
def email(self):
"""
发送邮件
"""
pass
def msg(self):
"""
发送短信
"""
pass
def wechat(self):
"""
发送微信
"""
pass依然是封装,将email、msg、wechat这些功能封装到 Message 中
看代码写结果
1
2
3
4
5
6
7class Foo:
def func(self):
print('foo.func')
obj = Foo()
result = obj.func()
print(reslut)1
2# 函数被实例化的时候会被执行 foo.func
# 函数没有返回值,所以result是none none看代码写结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22class Base1:
def f1(self):
print('base1.f1')
def f2(self):
print('base1.f2')
def f3(self):
print('base1.f3')
self.f1()
class Base2:
def f1(self):
print('base2.f2')
class Foo(Base1, Base2):
def f0(self):
print('foo.f0')
self.f3()
obj = Foo()
obj.f0()1
2
3
4
5
6# 函数继承的考察,Foo(Base1,Base2)。中Base1先写,所以优先级比Base2高。
foo.f0
base1.f3
base1.f1
# self是obj对象,在class Base1的 def f3(self) 中,调用了self.f1()
# 程序会先去class Foo(Base1, Base2)类中找f1(), 如果没有再去Base1中找看代码写结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18class 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()
obj = Foo()
obj.f2()1
2
3
4
5foo.f2
foo.f1
base.f3
# self是obj对象,在class Base类的f3()中调用self.f1()
# 程序先到class Foo()中找f1()方法,如果有就执行,没有再去所继承的Base()类中寻找补充代码实现
1
2
3
4
5
6
7
8
9
10
11
12user_lsit = []
while True:
user = input('请输入用户名:')
pwd = input('请输入密码')
email = input('请输入邮箱:')
"""
# 需求
1. while循环提示 用户输入:用户名、密码、邮箱(正则满足邮箱格式)
2. 为每个用户创建一个个对象,并添加到user_list中
3. 当列表中的添加 3个对象后,跳出循环并以此循环打印所有用户的姓名和邮箱
"""1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28import re
class UserInfo(object):
def __init__(self, name, pwd, email):
self.name = name
self.pwd = pwd
self.email = email
def run():
user_list = []
while True:
user = input('请输入用户名:')
pwd = input('请输入密码')
email = input('请输入邮箱:')
match_object = re.match("(\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)", email, re.ASCII)
if not match_object:
print("邮箱格式输入错误,请重新输入")
continue
user_object = UserInfo(user, pwd, email)
user_list.append(user_object)
if len(user_list) == 3:
break
for item in user_list:
print(item.name, item.email)
if __name__ == '__main__':
run()补充代码,实现用户注册和登录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31class User:
def __init__(self, name, pwd):
self.name = name
self.pwd = pwd
class Account:
def __init__(self):
# 用户列表,数据格式:[user对象,user对象,user对象]
self.user_list = []
def login(self):
"""
用户登录,输入用户名和密码然后去self.user_list中校验用户名合法性
"""
pass
def register(self):
"""
用户注册,每注册一个用户就创建一个user对象,然后添加到self.user_list中,表示注册成功
"""
pass
def run(self):
"""
主程序
"""
pass
if __name__ == '__main__':
obj = Account()
obj.run()1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69class User:
def __init__(self, name, pwd):
self.name = name
self.pwd = pwd
class Account:
def __init__(self):
# 用户列表,数据格式:[user对象,user对象,user对象]
self.user_list = []
def login(self):
"""
用户登录,输入用户名和密码然后去self.user_list中校验用户合法性
:return:
"""
print("用户登录")
while True:
user = input("请输入用户名(Q/q):")
if user.upper() == 'Q':
break
pwd = input("请输入密码:")
for user_object in self.user_list:
if user == user_object.name and pwd == user_object.pwd:
print("登录成功")
break
else:
print("登录失败")
def register(self):
"""
用户注册,没注册一个用户就创建一个user对象,然后添加到self.user_list中,表示注册成功。
:return:
"""
print("用户注册")
while True:
user = input("请输入用户名(Q/q):")
if user.upper() == 'Q':
break
pwd = input("请输入密码:")
user_object = User(user, pwd)
self.user_list.append(user_object)
def run(self):
"""
主程序
:return:
"""
method_dict = {
"1": {"title": "登录", "method": self.login},
"2": {"title": "注册", "method": self.register},
}
message = ";".join(["{}.{}".format(k, v['title']) for k, v in method_dict.items()])
while True:
print(message)
choice = input("请选择功能(Q/q):")
if choice.upper() == 'Q':
break
info = method_dict.get(choice)
if not info:
print("选择错误,请重新选择")
continue
method = info['method']
method() # self.login() / self.register()
if __name__ == '__main__':
obj = Account()
obj.run()