25类和对象---类和实例、组合

1、类和对象使用简单例子,python中一切皆对象

    数据属性是所有对象共享的

    函数属性是绑定给对象用的,绑定到对象的函数调用,会自动传值,把self传给函数 

class Student:
    '''hello cc'''
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def study(self):
        print('study....')

s = Student('cc',18)
print('name:{},age:{}'.format(s.name, s.age))
# # 类内置的特殊属性
print(Student.__dict__) # 类的字典属性{'__init__': <function Student.__init__ at 0x0000007676B512F0>, 'study': <function..
print(Student.__doc__) # 类的文档字符串 hello cc
print(Student.__base__) # 类的第一个父类 <class 'object'>
print(Student.__bases__) # 类所有父类构成的元组(<class 'object'>,)
print(Student.__name__) # 类的名字(字符串) Student
print(Student.__module__) #类定义所在的模块,__main__
print(Student.__class__) # <class 'type'>

 2、组合

组合:在一个类中把另外一个类的对象作为数据属性
例1: 
class Stu:
    def __init__(self, name, age, grade):
        self.name = name
        self.age = age
        self.grade = grade
        self.course = []
    def __repr__(self):
        return self.name

class Teacher:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.students = []
        self.course = []

    def __repr__(self):
        return self.name

class Course:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def __repr__(self):
        return self.name

cc1 = Teacher('cc1', 30)
cc2 = Teacher('cc2', 35)
stu1 = Stu('stu1', 18, 'grade2')
stu2 = Stu('stu2', 16, 'grade1')
stu3 = Stu('stu3', 16, 'grade1')
english = Course('english', 10000)
python = Course('pyhton', 2000)
linux = Course('linux', 3000)
cc1.course.append(english)
cc2.course.append(python)
cc2.course.append(linux)
cc1.students.append(stu1)
cc1.students.append(stu2)
cc1.students.append(stu3)
stu1.course.append(python)
stu1.course.append(english)
for s in cc1.students:
    print('{}:{}'.format(s, s.course))

 

例2:
class Garen:        #定义英雄盖伦的类,不同的玩家可以用它实例出自己英雄;
    camp='Demacia'  #所有玩家的英雄(盖伦)的阵营都是Demacia;
    def __init__(self,nickname,aggressivity=58,life_value=455): #英雄的初始攻击力58...;
        self.nickname=nickname  #为自己的盖伦起个别名;
        self.aggressivity=aggressivity #英雄都有自己的攻击力;
        self.life_value=life_value #英雄都有自己的生命值;
    def attack(self,enemy):   #普通攻击技能,enemy是敌人;
        enemy.life_value-=self.aggressivity #根据自己的攻击力,攻击敌人就减掉敌人的生命值。

class Riven:
    camp='Noxus'  #所有玩家的英雄(锐雯)的阵营都是Noxus;
    def __init__(self,nickname,aggressivity=54,life_value=414): #英雄的初始攻击力54;
        self.nickname=nickname  #为自己的锐雯起个别名;
        self.aggressivity=aggressivity #英雄都有自己的攻击力;
        self.life_value=life_value #英雄都有自己的生命值;
    def attack(self,enemy):   #普通攻击技能,enemy是敌人;
        enemy.life_value-=self.aggressivity #根据自己的攻击力,攻击敌人就减掉敌人的生命值。
g1 = Garen('cc')
r1 = Riven('dd')
print(r1.life_value)
g1.attack(r1)
print(r1.life_value)

 

posted @ 2021-04-05 14:33  cheng4632  阅读(103)  评论(0编辑  收藏  举报