python-day22~23_类 面向对象作业——校园管理系统

1,# 人狗大战
def Dog(name,blood,aggr,kind):
  dog = {
    'name': name,
    'blood': blood, # 血量
    'aggr': aggr, # 攻击力
    'kind': kind,
  }
  def bite(person):
    person['blood'] -= dog['aggr']
    print('%s被咬了,掉了%s的血' % (person['name'], dog['aggr']))
  dog['bite'] = bite
  return dog

def Person(name,blood,aggr,sex):
  person = {
    'name' : name,
    'blood': blood, # 血量
    'aggr': aggr, # 攻击力
    'sex':sex,
  }
  def attack(dog):
    dog['blood'] -= person['aggr']
    print('%s被打了,掉了%s的血' % (dog['name'], person['aggr']))
  person['attack'] = attack
  return person

# 代码精简了 方便增加人物 方便修改 人物更加规范 —— 人模子

jin = Dog('金老板',1000,100,'teddy')
alex = Person('狗剩儿',100,1,'不详')
# nezha = Person('哪吒',200,2,'不详')
print(jin)
jin['bite'](alex)
alex['attack'](jin)
# Dog函数和Person函数 都是定义了一类事物
# 直到调用了函数,赋值了之后才真的有了一个实实在在的人或狗


# 面向对象编程
# 所谓模子 就是 类 抽象的 我能知道有什么属性 有什么技能 但不能知道属性具体的值
# jin alex nezha 就是对象 有具体的值,属性和技能都是根据类规范的

2,

class 类名:
  属性 = 'a'

print(类名.属性)
类名的作用 就是操作属性 查看属性

类名的第一个字母一般大写

class Person: # 类名
  country = 'China' # 创造了一个只要是这个类就一定有的属性
          # 类属性 静态属性
  def __init__(self,*args): # 初始化方法,self是对象,是一个必须传的参数
    # self就是一个可以存储很多属性的大字典
    self.name = args[0] # 往字典里添加属性的方式发生了一些变化
    self.hp = args[1]
    self.aggr = args[2]
    self.sex = args[3]

  def walk(self,n):    # 方法,一般情况下必须传self参数,且必须写在第一个
           # 后面还可以传其他参数,是自由的
    print('%s走走走,走了%s步'%(self.name,n))

# print(Person.country)    # 类名 可以查看类中的属性,不需要实例化就可以查看
alex = Person('狗剩儿',100,1,'不详')    # 类名还可以实例化对象,alex对象 # 实例化
# print(alex.__dict__)   # 查看所有属性
print(alex.name)    # 查看属性值
# print(alex.hp)   # 查看属性值
alex.walk(5)   # 功能等同于Person.walk(alex,5)    # 调用方法 类名.方法名(对象名)

# print(Person.__dict__['country'])
# Person.__dict__['country'] = '印度'
# print(alex.__dict__['name'])
# alex.__dict__['name'] = '二哥'
# print(alex.__dict__)
# print(alex.name)
# print(alex.name)
# alex.name = '二哥'
# alex.__dict__['name'] = '二哥'
# alex.age = 83
# print(alex.__dict__)
# print(alex.name)

# 对象 = 类名()
# 过程:
  # 类名() 首先 会创造出一个对象,创建了一个self变量
  # 调用init方法,类名括号里的参数会被这里接收
  # 执行init方法
  # 返回self
# 对象能做的事:
  # 查看属性
  # 调用方法
  # __dict__ 对于对象的增删改查操作都可以通过字典的语法进行
# 类名能做的事:
  # 实例化
  # 调用方法 : 只不过要自己传递self参数
  # 调用类中的属性,也就是调用静态属性
  # __dict__ 对于类中的名字只能看 不能操作

3,

class Dog:
    def __init__(self,name,blood,aggr,kind):
        self.name = name
        self.hp = blood
        self.aggr = aggr
        self.kind = kind
    def bite(self,person):
        # 狗咬人,人掉血
        person.blood -= self.aggr

class Person:
    def __init__(self,name,blood,aggr,sex):
        self.name = name
        self.blood = blood
        self.aggr = aggr
        self.sex = sex
    def attack(self,dog):
        dog.hp -= self.aggr
        if dog.hp <= 0:
            print('%s打了%s,%s被打死了,扑街~~~'%(self.name,dog.name,dog.name))
        else:
            print('%s打了%s,掉了%s血'%(self.name,dog.name,self.aggr))

jin = Dog('金老板',100,20,'teddy')
# print(jin.name)
alex = Person('alex',999,998,'不详')
jin.bite(alex)   # Dog.bite(jin,alex)
print(alex.blood)
# alex attack
alex.attack(jin)  # Person.attack(alex,jin)
print(jin.hp)

4,

# 类里 可以定义两种属性
# 静态属性
# 动态属性

class Course:
  language = ['Chinese']
  def __init__(self,teacher,course_name,period,price):
    self.teacher = teacher
    self.name = course_name
    self.period = period
    self.price = price
  def func(self):
    pass

python = Course('egon','python','6 months',20000)  # 对象中有个类对象指针,指向类。对象中使用的静态变量,来自类里面
linux = Course('egon','linux','6 months',20000)
python.language = 'En'  # 对象没有改变类中的静态变量,而是在对象中新增了一个language变量
print(Course.__dict__)
print(python.__dict__)  
print(linux.__dict__)

# del python.language

# 类中的静态变量 可以被对象和类调用
# 对于不可变数据类型来说,类变量最好用类名操作(才能改类中的变量)
# 对于可变数据类型来说,对象名的修改是共享的(改变类中的变量),重新赋值是独立的(只能改动对象中的变量)

 比如:

python.language = 'En'  # 只改y到对象中的变量
python.language[0] = 'En' # 列表是可变数据类型,加索引之后,只改列表中的不可变数据类型,列表的内存地址不会变,所以改变了列表中的内容,类中的变量值就改了

5,类的组合

# 人狗大战
class Dog:
    def __init__(self,name,aggr,hp,kind):
        self.name = name
        self.aggr = aggr
        self.hp = hp
        self.kind = kind

    def bite(self,person):
        person.hp -= self.aggr

class Person:
    def __init__(self,name,aggr,hp,sex):
        self.name = name
        self.aggr = aggr
        self.hp = hp
        self.sex = sex
        self.money = 0

    def attack(self,dog):
        dog.hp -= self.aggr

    def get_weapon(self,weapon):
        if self.money >= weapon.price:
            self.money -= weapon.price
            self.weapon = weapon
            self.aggr += weapon.aggr
        else:
            print("余额不足,请先充值")

class Weapon:
    def __init__(self,name,aggr,njd,price):
        self.name = name
        self.aggr = aggr
        self.njd = njd
        self.price = price

    def hand18(self,person):
        if self.njd > 0:
            person.hp -= self.aggr * 2
            self.njd -= 1

alex = Person('alex',0.5,100,'不详')
jin = Dog('金老板',100,500,'teddy')
w = Weapon('打狗棒',100,3,998)
# alex装备打狗棒
alex.money += 1000
alex.get_weapon(w)
print(alex.weapon)
print(alex.aggr)
alex.attack(jin)
print(jin.hp)
alex.weapon.hand18(jin)
print(jin.hp)

# 组合 :一个对象的属性值是另外一个类的对象
#        alex.weapon 是 Weapon类的对象

6,

面向对象作业——校园管理系统

 

角色:

学校、学员、课程、讲师

要求:

1. 创建北京、上海 2 所学校

2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开

3. 课程包含,周期,价格

4. 班级关联课程、讲师

5. 创建学员时,选择学校,关联班级

5. 创建讲师角色时要关联学校

6. 提供三个角色视图

  6.1 学员视图, 登陆, 查看课程、查看班级

  6.2 讲师视图, 讲师可查看自己教学的班级、课程。

          进阶需求:可管理自己的班级, 查看班级学员列表 , 修改所管理的学员的成绩

  6.3 管理视图,创建讲师, 创建班级,创建课程

7. 上面的操作产生的数据都通过pickle序列化保存到文件里

我的解答:

class Course:
def __init__(self,name,period,price):
self.name = name
self.period = period
self.price = price
class Teacher:
def __init__(self,name):
self.name = name
class Clas:
def __init__(self,name,course,teacher):
self.name = name
self.course = course
self.teacher = teacher
class School:
def __init__(self,name,clas):
self.name = name
self.clas = clas
class Student:
def __init__(self,name,clas):
self.name = name
self.clas = clas
# self.sort = sort
# 文件存放格式:id,teacher,school,class,course,student,sort
# 文件存放格式:id,teacher,school,class,course,student,sort

角色:

学校、学员、课程、讲师

要求:

1. 创建北京、上海 2 所学校

2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开

3. 课程包含,周期,价格

4. 班级关联课程、讲师

5. 创建学员时,选择学校,关联班级

5. 创建讲师角色时要关联学校

6. 提供三个角色视图

  6.1 学员视图, 登陆, 查看课程、查看班级

  6.2 讲师视图, 讲师可查看自己教学的班级、课程。

          进阶需求:可管理自己的班级, 查看班级学员列表 , 修改所管理的学员的成绩

  6.3 管理视图,创建讲师, 创建班级,创建课程

7. 上面的操作产生的数据都通过pickle序列化保存到文件里

猜你喜欢

转载自www.cnblogs.com/yygy/p/10268208.html