面向对像(1day)

# list
# int
# tuple


#在python3中,所有的类都是新式类
#
# class A:pass
# print(A.__bases__)
#python3中你不写都默认给你是继承object
#
#
#
# #在python2中,新式类
# class B(object):pass
B继承object
# class C(B):pass
C继承B
#
# print(B.__bases__)
# print(C.__bases__)
#
#
#
# #在python2中,经典类
# class D:pass
# print(D.__bases__)


# class Student:
#     country = 'China'
#
#     def __init__(self, ID, NAME, SEX, PROVINCE):#__init__这函数下面不能有除了none以外的返回值
#         self.id = ID
#         self.name = NAME
#         self.sex = SEX
#         self.province = PROVINCE
#
#     def search_score(self):
#         print('tell score')
#
#     def study(self): #self=s1
#         print('study',self)
#类的属性是:特征(变量)和技能(函数)

#类的用法:实例化,属性引用
# s1 = Student('371818181818181', 'cobila', 'female', 'shanxi')
    #Student.__init__(s1,'371818181818181','cobila','female','shanxi')就等于上面的一行,但是这个函数不能有return
    # s1.id='371818181818181'
    # s1.name='cobila'
    # s1.sex='female'
    # s1.province='shanxi'

# print(Student.country)这是引用类的变量
# print(Student.__init__)
# print(Student.study) 这些都是函数加括号就能运行
# print(Student.search_score) 都是函数

# Student.__init__(s1,'371818181818181','cobila','female','shanxi')因为是函数,所以加括号就运行
# Student.study(s1)

# Student.x=1   给类增加一个属性
# print(Student.x)
# x=10000000
# print(Student.x)还是1,涉及到名字,跟命名空间有关,类相当于把一堆名字,包起来了
你要用,就必须类名.xx的方法来进行

# del Student.x    删除类的那个属性
# print(Student.x)
#
# print(Student.study)
# del Student.study 删除类的属性
# print(Student.study)接下来就会报错

# Student.country='xxxxx' 改变类的属性
# print(Student.country)


# class Struct:pass
# Struct.x=1
# Struct.y=2
# Struct.res=Struct.x+Struct.y
# print(Struct.res)
这嘛做的好处是,变量来自于类,跟外部的名字隔离,


# class Student:
#     country = 'China'
#
#     def __init__(self, ID, NAME, SEX, PROVINCE):
#         self.id = ID
#         self.name = NAME
#         self.sex = SEX
#         self.province = PROVINCE
#
#     def search_score(self):
#         print('tell score')
#
#     def study(self): #self=s1
#         print('study',self)
#
# s1 = Student('371818181818181', 'cobila', 'female', 'shanxi')

#对象也称为实例
#对象的属性:对象本身就只有特征(变量)

#对的用法:属性引用
# print(s1.id,s1.name,s1.sex,s1.province)
# s1.weight=100
#
# weight=1111111111111111111111111111111111111111111111
# print(s1.weight)
# # del s1.weight
# # print(s1.weight)
#
# s1.id=123   修改
# print(s1.id)



#类的名称空间与对象的名称空间
# x=123123123123
# class Student:
#     country = 'China'
#
#     def __init__(self, ID, NAME, SEX, PROVINCE):
#         self.id = ID
#         self.name = NAME
#         self.sex = SEX
#         self.province = PROVINCE
#
#
#     def search_score(self):
#         print('tell score')
#
#     def study(self): #self=s1
#         print('study',self)
#     def walk(self):
#         print('name:%s is walking' %self.name)
#
# s1 = Student('371818181818181', 'cobila', 'female', 'shanxi')
# s2 = Student('371818181sadf818181', 'cobilamei', 'femaleasfd', 'shasdfanxi')
#
#
# # print(Student.__dict__) #查看类的名称空间,是一个字典
# # print(Student.country) 就是在类里面有没有一个country对应的value
# # print(s1.__dict__)#查看对象的名称空间,是一个字字典
# # print(s1.id)
# # s1.country="123123123"
# # print(id(s1.country))
# # print(id(s2.country))
# # print(id(Student.country))
# #
# print(s1.study,id(s1.study))
# print(Student.study,id(Student.study))
# #绑定方法的核心在于‘绑定’,唯一绑定一个确定的对象
# s1.walk()
# s2.walk()



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 #根据自己的攻击力,攻击敌人就减掉敌人的生命值。

class Garen:
    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 #根据自己的攻击力,攻击敌人就减掉敌人的生命值。


#对象之间的交互
# r1=Riven('芮雯雯')
# g1=Garen('草丛轮')
# print(r1.life_value)
# g1.attack(r1)
# print(r1.life_value)


# name=input('your nickname: ')
# r1=Riven(name)
面向对像程序考虑的时候
#应用场景想清楚
#找不到共同特征和技能不用强求



#对象:学校----->归类
    #共有的特征:商标为etiantian
    #共有的技能:招生
    #独有的特征:地址不一样,老师们,课程

class School:
    tag='etiantian'
    def __init__(self,addr):
        self.addr=addr
        self.teacher_list=[]
        self.course_list=[]

    def zhaosheng(self):
        pass


#对象:老师---->归类
    #共同的技能:教课
    #独有的特征:名字,性别,level,课程

class Teacher:

    def __init__(self,name,sex,level):
        self.name=name
        self.sex=sex
        self.level=level
        self.course_list=[]

    def teach(self):
        pass


#对象:学生---->归类
    #共同的特征:
    #共同的技能:search_score,handin
    #独有的特征:学号,名字,性别,课程
class Student:
    def __init__(self,ID,name,sex):
        self.id=ID
        self.name=name
        self.sex=sex
        self.course_list=[]
    def search_score(self):
        pass

    def handin(self):
        pass

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

s1=Student('123123123123','cobila','female')
# print(s1.id,s1.name,s1.sex)
# print(s1.course_list)
# s1.course_list.append('python')
# s1.course_list.append('linux')
# print(s1.course_list)

python_obj=Course('python',15800,'7m')
linux_obj=Course('linux',19800,'2m')


s1.course_list.append(python_obj)
s1.course_list.append(linux_obj)
# print(s1.course_list)

print('''student name is:%s
    course name is :%s
    course price is :%s
    ''' %(s1.name,s1.course_list[0].name,s1.course_list[0].price))
www.cnblogs.com/linhaifeng/articles/6182264.html
原文地址:https://www.cnblogs.com/wanchenxi/p/7507271.html