类的定义和对象的产生
对象:特征与技能的结合体
类:一系列对象相似的特征与相似的技能的结合体
强调:站在不同的分类,划分的分类不一定一样
#问题来了
到底是先分类还是先有对象?
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))