类的定义和对象的产生

类的定义和对象的产生

对象:特征与技能的结合体
类:一系列对象相似的特征与相似的技能的结合体

强调:站在不同的分类,划分的分类不一定一样
#问题来了
到底是先分类还是先有对象?
1.程序中:
    必须先定义类,然后调用类产生的对象
2.现实生活中
    先有对象,再有类
"""
使用专业的语法定义类
1.定义函数
def 函数名():
    pass
2.定义类
Class 类名():
    pass

""""
#定义类
"""
    发生了生么事?
    1.立即执行类代码
    2.产生以个类的名称空间,把类体里面执行的名字都仍到名称空间中(大字典)
    
    3.把类的名称空间捆绑给__dict__,类名.__dict__
    
    
"""
#类名一般情况下手写字母大写
Class Student():
    #定义一个属性
    school = 'SH'
    #定义一个技能(函数)
    def choose_course(stu_dict, course):
        stu_dict['course'].append(course)
        print('%s选课成功 %s' % (stu_dict['name'],stu_dict['course']))
        print('....')
   #查看名称空间  
    #调用类产生的对象  默认产生的就是一个空间对象{}
    
    stu1 =Student()
    stu2 =Student()
    stu3 =Student()
    stu4 =Student()
    
    print(stu1.__dict__)
    print(stu2.__dict__)
    print(stu3.__dict__)
    print(stu4.__dict__)
    

给对象制定自己独有的属性

class Student():
    #定义一个属性
    schonnl = 'sh'
    #初始化方法
    #调用类自动触发的函数
    #该方法不一定要定义,需要用到就定义,不需要不要刻意定义
    def__init__(stu_obj, name, age, gender):
        #空对象.name = name
        #空对象.age = age
        #空对象.gender = gender
        stu_obj.name = name    # stu1.__dict__['name'] = 'jason'
        stu_obj.age = age     # stu1.__dict__['age'] = 18
        stu_obj.gender = gender   # stu1.__dict__['gender'] = 'male'、
    
    # return None # 在这个方法中不能有返回值,
    #定义一个(函数)技能
     def choose_course(stu_dic, course):
        stu_dict['course'].append(course)
        print('%s选课成功 %s' % (stu_['name'],stu_dict[course]))
   #调用类发生了几件事?
'''
1.得到一个空对象
2.调用了student.__dict__(空对象,'ly',19,'male')
3.得到一个初级化结果

'''
  stu1 = Student('ly',19,'male')  
  stu2 = Student('jason', 10, 'male')
    
    
    # stu1 = Student()
# print(stu1.__dict__)
# print(stu2.__dict__)

# print(stu1.name)
# print(stu2.name)

# 属性的查找:先从自己的对象中查找,然后在去产生对象的类中取找
    
 stu1.school = 'qwert' 
print(stu1.school)
  • 属性的查找顺序

  • 版本3
    
    class student():
        #定义一个属性
        school = 'sh'
        def__init__(self,name,age, course = none):
            if course is none:
                course = []
             self.name = name
            self.age = age
            self.gender = gender
            self.course = course
         def choose_course(self,course)
        print('%s选课成功%s' % (self.name,self.course))
        def func(self,name,age)
    
    #属性的查找:
    #1.类属性:在类中写的属性就成为类属性
    #2.对象属性:在对象自己的名称空间中的属性就是对象属性
    #类属性的查找
    #1.查
    #print(student.school)
    #2.增加
    #student.country = 'china'
    #3。改
    #student.school = 'bj'
    #4.删除
    #del student.school
    #print(student.__dict__)
    #{}
    stu = Student('ly', 18, 'male')  # 实例化对象, stu就是一个实例
    #对象属性
    #1.查
    #print(stu.name)
    #print(stu.age)
    #print(stu.gender)
     2. 增
    # stu.aaa = 'aaa'
    #
    # # 3. 改
    # stu.name = 'bbb'
    
    # 4. 删除
    # del stu.name
    # print(stu.__dict__)
    
    
    
    #类中的方法,类可以调用,对象也可以调用
    #类调用方法
    #student.choose_course(stu,'python')  #类调用,函数的参数有几个就传几个
    #print(student.choose_course)
    
    
    #对象调用的方法
    #类中的方法, 雷克以调用,对象也可以调用,但是,推荐对象来调用,因为对象来调用,会把自己当成第一个参数传递给函数
    stident.choose_course('python') ## stu.choose_course(stu, 'python')
    
    class Teacher():
        pass
    print(isinstance(123, int))
    print(isinstance(stu, Teacher))

     

上一篇:面向对象


下一篇:MySQL及SQL(基础篇)