Python 学习笔记-18

Python 学习笔记-18:

  1. 成员修饰符
  2. 特殊成员
  3. 原始类,metaclass
  4. 异常处理
  5. 反射
  6. 单例模式
  7. 本周作业

1. 成员修饰符

  • 共有成员经过成员修饰符修饰之后变为私有成员
  • 私有成员无法在外部直接访问,只能通过内部访问后传给外部

  • 代码示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Foo:
    def __init__(self, name, age):
    self.name = name
    self.__age = age # 用成员修饰符修饰的字段

    def show(self):
    # 通过成员修饰符修饰的字段在外部无法直接读取
    # 只能通过内部函数读取后输出
    print(self.__age)

    obj = Foo('alex', 19)
    print(obj.name)
    obj.show()

2. 特殊成员[部分]

  1. init 类()自动执行
    1. call对象()或类()()自动执行
  2. intint(对象)
  3. strstr()
  4. dict将对象中封装的所有内容通过字典的形式返回
  5. getitem用于索引操作,如字典。表示获取数据
  6. setitem用于索引操作,如字典。表示设置数据
  7. delitem用于索引操作,如字典。表示删除数据

3. 原始类,metaclass

  • Python中一切事物都是对象

4. 异常处理

1
2
3
4
5
6
7
try:

except:

else:

finally:

5. 反射

  • 通过字符串增删改一个对象的成员
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
obj = Foo('alex', 18)
b = 'name'
print(obj.__dict__)
print(obj.__dict__[b])

inp = input('>>:')
v = getattr(obj, inp)
r = v()
print(r)

# hasattr(obj, 'name') 判断是否存在

# setattr(obj, 'k1', 'v1') 设置一个新的成员

# delattr(obj, 'k1') 删除成员

6. 单例模式

  • 永远使用同一份实例(对象)
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
# 原理简介
class Foo:
def __init__(self, name, age):
self.name = name
self.age = age

def show(self):
print(self.name, self.age)

v = None
if v:
v.show()
else:
v = Foo('alex', 20)
v.show()

# 实现方法
class Foo:
__v = None

@classmethod
def get_instance(cls):
if cls.__v:
return cls.__v
else:
cls.__v = Foo()
return cls.__v

# 不要再使用 类() 的方法创建对象,直接用下面的方法
obj1 = Foo.get_instance()
print(obj1) # <__main__.Foo object at 0x000002438B957A58>
obj2 = Foo.get_instance()
print(obj2) # <__main__.Foo object at 0x000002438B957A58>
obj3 = Foo()
print(obj3) # <__main__.Foo object at 0x000002438B957A90>
obj4 = Foo()
print(obj4) # <__main__.Foo object at 0x000002438B957B00>

7. 本周作业:选课系统

角色:学校、学员、课程、讲师
要求:

  1. 创建北京、上海 2 所学校
  2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
  3. 课程包含,周期,价格,通过学校创建课程
  4. 通过学校创建班级, 班级关联课程、讲师
  5. 创建学员时,选择学校,关联班级
  6. 创建讲师角色时要关联学校,
  7. 提供两个角色接口
    6.1 学员视图, 可以注册, 交学费, 选择班级,
    6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩
    6.3 管理视图,创建讲师, 创建班级,创建课程
  8. 上面的操作产生的数据都通过pickle序列化保存到文件里