类与对象

一:类

   对象是特征与技能的结合体,那类就是一系列对象相同的特征与技能的结合体

2、在现实世界:

  一定先有对象,后来随着人类文明的发展总结出来的类对象是具体存在的,而类只是一种抽象概念

3、在程序中,务必保证:先定义类,后调用类来产生对象

现实生活中的对象:

  对象1:

    特征:
      school='oldboy'
      name='马冬梅'
      age=18
      sex=‘female’
    技能:
      学习
      选课
  对象2:

    特征:
      school=‘oldboy‘
      name=’ryan‘
      age=18
      sex=‘male'
    技能:
      学习
      选课

程序中的类

class oldboy:
     #用变量表示特征       
    school=‘oldboy’
    def __init__(self, name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
       #用函数表示技能
        def learn(self):
            pring('is learning'def  choose(self):
            print('choose course')
#在程序中,必须先定义lei--------》调用---------》对象

调用:

 stu1=OldboyStudent('马冬梅',18,’female‘)
# stu1.NAME='马冬梅'
# stu1.AGE=18
# stu1.SEX="female"
#
stu2=OldboyStudent(’ryan‘,18,’male‘)
# stu2.NAME='ryan'
# stu2.AGE=18
# stu2.SEX="male"
print(stu1.name,stu1.school)
print(stu2.name,stu2.school)

调用发生哪些事情:

1、首先会产生一个空对象stu1

2、会自动触发类内部的__init__函数

3、然后将空对象stu1连同调用类时括号内的参数组成(stu1,‘马冬梅’,18,‘female’)

二:对象的使用

school=‘xxxxxxxxxxxx’
class OldboyStudent:
    school='oldboy'

    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

    #self=stu1
    def learn(self):
        print('%s is learning' %self.name)

    def choose(self,course):
        print('%s is choosing %s' %(self.name,course))

调用类=======》产生类的对象,该对象也可以称之为类的一个实例,调用类的过程也称之为类的实例化

stu1=OldboyStudent('李三胖',18,‘male’)

# OldboyStudent.country='CHINA'
# print(OldboyStudent.country)

# print(OldboyStudent.__dict__)
# print(stu1.__dict__)
# print(stu1.__dict__['name'])
# print(stu1.name)
# print(stu1.school)
# print(school)

stu2=OldboyStudent('王大炮',28,'male')
# print(stu2.__dict__)



# 类内部定义的变量是给所有对象共享,所有对象指向的都是同一个内存地址
# print(id(stu1.school))
# print(id(stu2.school))
# print(id(OldboyStudent.school))

# 类内部定义的函数,类可以使用,但类来用的时候就是一个普通函数,普通函数有几个参就传几个参数
# print(OldboyStudent.learn)
# OldboyStudent.learn(123)

# 类内部定义的函数,其实是给对象使用的,而且是绑定给对象用,绑定给不同的对象就是不同的绑定方法
# print(stu1.learn)
# print(stu2.learn)
# 绑定方法的特殊之处在于,谁来调用,就会将谁当作第一个参数自动传入

# stu1.learn() # OldboyStudent.learn(stu1)
# stu2.learn() # OldboyStudent.learn(stu2)



# stu1.choose('python')
# stu2.choose('linux')