其他 类 : 这个类有什么属性 有什么方法 大致的样子 不能知道具体的属性对应的值 对象 :之前所有的属性值就都明确了 类型 :int float str dict list tuple set -- 类(内置的数据类型,内置的
其他
类 : 这个类有什么属性 有什么方法 大致的样子 不能知道具体的属性对应的值 对象 :之前所有的属性值就都明确了 类型 :int float str dict list tuple set -- 类(内置的数据类型,内置的类) 通过type()查看类型 举例: 变量名 = xx数据类型对象 a = 10 b = 12.5 l = [1,2,3] d = {'k':'v'} o = 函数 q = 迭代器 u = 生成器 i = 类名 python中一切皆对象,对象的类型就是类。 所有的对象都有一个类型,class A实例化出来的对象的类型就是A类 123的类型是int 'ajksfk'的类型是str {}的类型是dict alex = Person()的类型是Person 小白 = Dog()的类型是Dog def abc():pass print(type(abc))#<class 'function'>
命名空间和内存
类中的变量是静态变量 对象中的变量只属于对象本身,每个对象有属于自己的空间来存储对象的变量 当使用对象名去调用某一个属性的时候会优先在自己的空间中寻找,找不到再去对应的类中寻找 如果自己没有就引用类的,如果类也没有就报错 对于类来说,类中的变量所有的对象都是可以读取的,并且读取的是同一份变量 类中的静态变量的用处: 如果一个变量 是所有的对象共享的值,那么这个变量应该被定义成静态变量 所有和静态变量相关的增删改查都应该使用类名来处理 而不应该使用对象名直接修改静态变量 类指针:在对象名称空间中存储了类所在的内存地址,对象总是能单向找到类,类不能找到对象。对象a的名称空间找不到,就去类A的名称空间去找。 ####1: class A: #class A一个缩进内的内容,不用调用就会执行。在一个缩进内不能使用A.的方式调用,因为A是最后才指向命名空间的 Country = '中国' # 静态变量/静态属性 存储在类的命名空间里的 def __init__(self,name,age): # 类内部的函数叫绑定方法 存储在类的命名空间里的 self.name = name self.age = age def func1(self): #self 就是一个形式参数,传什么接收什么 print(self) def func2(self):pass def func3(self):pass def func4(self):pass def func5(self):pass # a = A('alex',83) # print(a)#<__main__.A object at 0x00000239DE64FB70> print(a.name)#alex print(a.Country)#中国 #类指针:存储了类所在的内存地址,对象总是能单向找到类,类不能找到对象。对象a的名称空间找不到,就去类A的名称空间去找。 print(A.Country)#中国 一般不用类名的调用 a.func1() # 等价于# A.func1(a) #一般不用不用类名调用方法,用对象去调用方法 # <__main__.A object at 0x00000239DE64FB70> ###:2 class A: #class A一个缩进内的内容,不用调用就会执行。在一个缩进内不能使用A.的方式调用,因为A是最后才指向命名空间的 Country = '中国' # 静态变量/静态属性 存储在类的命名空间里的 def __init__(self,name,age): # 类内部的函数叫绑定方法 存储在类的命名空间里的 self.name = name self.age = age def func1(self): print(self) def func2(self):pass def func3(self):pass def func4(self):pass def func5(self):pass Country = '印度' print(A.Country)#印度 #注意同上面的区别 print(A.__dict__) ###3: class A: Country = '中国' # 静态变量/静态属性 存储在类的命名空间里的 def __init__(self,name,age,country): # 绑定方法 存储在类的命名空间里的 self.name = name self.age = age self.Country = country def func1(self): print(self) def func2(self):pass def func3(self):pass def func4(self):pass def func5(self):pass a = A('alex',83,'印度') print(a.name)#alex print(a.Country)#印度 对象a的名称空间可以找到,就不去类A的名称空间取值。 print(A.Country)#中国 ###4: class A: Country = '中国' # 静态变量/静态属性 存储在类的命名空间里的 def __init__(self,name,age,country): # 绑定方法 存储在类的命名空间里的 self.name = name self.age = age self.Country = country #注意大写,如果写成小写,又去找大写print(b.Country)就会是中国 def func1(self): print(self) def func2(self):pass def func3(self):pass def func4(self):pass def func5(self):pass a = A('alex',83,'印度') b = A('wusir',74,'泰国') a.Country = '日本' #属性的修改 print(a.Country)#日本 print(b.Country)#泰国 print(A.Country)#中国 ###5: class A: Country = '中国' # 静态变量/静态属性 存储在类的命名空间里的 def __init__(self,name,age,country): # 绑定方法 存储在类的命名空间里的 self.name = name self.age = age def func1(self): print(self) def func2(self):pass def func3(self):pass def func4(self):pass def func5(self):pass a = A('alex',83,'印度') b = A('wusir',74,'泰国') A.Country = '日本' #静态变量的修改,通过类名来处理 print(a.Country)#日本 #a = A('alex',83,'印度')虽然传入了参数,但是在对象a的名称空间中没有定义变量,没有此句self.Country = country print(b.Country)#日本 print(A.Country)#日本 ####6: class A:pass A.Country = 123 # 属性的增加 print(A.Country) #123 查看或者引用 # 实现一个类,能够自动统计这个类实例化了多少个对象 class A: count = 0 #静态变量 def __init__(self): A.count += 1 #每次实例化对象就+1 注意在一个缩进内不能使用 A.方式 a1 = A() print(a1.count)#1 对象a1的名称空间找不到,就去类A的名称空间取值。 a2 = A() print(A.count)#2 #静态变量的查看,通过类名来处理
组合
?
###组合:一个类的对象是另外一个类对象的属性。作用:方便代码修改,让代码更加灵活 学生类 姓名 性别 年龄 学号 班级 手机号 班级信息 班级名字 开班时间 当前讲师 class Student: def __init__(self,name,sex,age,number,clas,phone): self.name = name self.sex = sex self.age = age self.number = number self.clas = clas self.phone = phone class Clas: def __init__(self,cname,begint,teacher): self.cname = cname self.begint = begint self.teacher = teacher # 查看的是大壮的班级的开班日期是多少 # 查看的是雪飞的班级的开班日期是多少 py22 = Clas('python全栈22期','2017-4-26','小白') py23 = Clas('python全栈23期','2017-5-28','宝元') 大壮 = Student('大壮','male',18,27,py23,13812012012) 雪飞 = Student('雪飞','不详',18,17,py22,13812012013) print(大壮.clas,py23)#二者是同一个<__main__.Clas object at 0x000002749D66FA20> <__main__.Clas object at 0x000002749D66FA20> print(py23.begint)#2017-5-28 print(大壮.clas.begint)#2017-5-28 print(py22.begint)#2017-4-26 print(雪飞.clas.begint)#2017-4-26 练习 : 对象变成了一个属性 班级类 包含一个属性 - 课程 课程 课程名称 周期 价格 ###1: class Clas: #班级 def __init__(self,cname,begint,teacher,course): self.cname = cname self.begint = begint self.teacher = teacher self.course = course #课程 class Course: #课程 def __init__(self,name,period,price): self.name = name self.period = period self.price = price python = Course('python22','6个月',21800) py22 = Clas('python全栈22期','2017-4-26','小白',python) print(py22.course.price)#21800 print(python.price)#21800 ##2: class Clas: def __init__(self,cname,begint,teacher): self.cname = cname self.begint = begint self.teacher = teacher class Course: def __init__(self,name,period,price): self.name = name self.period = period self.price = price python = Course('python22','6个月',21800) py22 = Clas('python全栈22期','2017-4-26','小白') py22.clas = python #属性的增加 注意同上面的区别 print(py22.clas.price)#21800 print(python.price)#21800 ##3: class Clas: def __init__(self,cname,begint,teacher): self.cname = cname self.begint = begint self.teacher = teacher class Course: def __init__(self,name,period,price): self.name = name self.period = period self.price = price py22 = Clas('python全栈22期','2019-4-26','小白') linux57 = Clas('linux运维57期','2019-3-27','李导') linux58 = Clas('linux运维58期','2019-6-27','李导') python = Course('python','6 months',21800) linux = Course('linux','5 months',19800) linux57.course = linux linux58.course = linux print(linux57.course.price)#19800 print(linux58.course.price)#19800 py22.course = python print(py22.course.period)#6 months linux.price = 21800 print(linux57.course.price)#21800 print(linux58.course.price)#21800 ##4: 自(测试): class Clas: def __init__(self,cname,begint,teacher,cperiod,cprice): self.cname = cname self.begint = begint self.teacher = teacher self.cprice = cprice # 课程价格 self.cperiod = cperiod # 课程周期 class Course: def __init__(self,name,period,price): self.name = name self.period = period # 课程周期 self.price = price #课程价格 linux = Course('linux', '5 months', 19800) linux.price = 21800 #修改此处,所有课程价格统一修改 linux57 = Clas('linux运维57期','2017-3-27','李导',linux.period,linux.price) linux58 = Clas('linux运维58期','2017-4-27','王导',linux.period,linux.price) linux59 = Clas('linux运维59期','2017-5-27','张导',linux.period,linux.price) linux60 = Clas('linux运维60期','2017-6-27','马导',linux.period,linux.price) linux61 = Clas('linux运维61期','2017-7-27','赵导',linux.period,linux.price) print(linux57.cprice)#21800 print(linux58.cprice)#21800 print(linux59.cprice)#21800