# 练习:编写一个学生类,产生一堆学生对象,要求有一个计数器(属性),统计总共实例了多少个对象
class Student: # count = 0 # def __init__(self,name,age,sex): # self.name = name # self.age = age # self.sex = sex
# Student.count += 1 # # def count1(self): # print('有学生%s'%self.count1) # # stu = Student('alex',23,'male') # stu1 = Student('al1',23,'male') # stu2 = Student('al1',23,'male')
分析:
很多开始学习面向对象的同学都会碰到这样的题,这类题考的就是类的空间及属性和对象的空间及属性掌握的清不清楚 ,相信有不少同学在对count定义的时候,顺手就写成了self.count +=1.我当初就差点写成了这个,幸好灵机一动。没有掉进这个坑。因为类的数据属性是被所有对象所共有的,而对象的属性只属于对象自己,所以如果是self.count那么每次创建一个对象,只会在对象的空间中添加count = 1.而定义在类中那么这个属性对每一个创建的对象都是共享的这也意味着,可以通过__init__方法初始化对象属性的时候也对类的count属性进行+1操作。也就是实现了题目的需求
类和类的实例化能不能做字典的键值:
# class Person: # def __init__(self,name,age): # self.name = name # self.age = age # # dic ={} # dic.setdefault(Person,'wang') #类可以用来做字典的key # print(dic) # p1 = Person('zhang',23) #对象可以做字典的KEY # dic.setdefault(p1,9) # print(dic)
结果:
{<class '__main__.Person'>: 'wang'} {<class '__main__.Person'>: 'wang', <__main__.Person object at 0x000000C27B4984A8>: 9}
分享一些小知识:
在最开始的时候为了实现高亮我们都是 33[31;1m 33[0m这样来。现在有一个相对比较简单的方法:
#控制台输出不同颜色和背景色的字体color默认是字体颜色,第三个属性是背景颜色
from termcolor import colored, cprint
# print(termcolor.grey('yes'))
# print(colored.cyan('yes2'))
# text = colored('Hello, World!', 'red', attrs=['reverse', 'blink'])
# print(text)
# print(colored('yes','red','on_red'))
# red_on_cyan = lambda x: colored(x, 'red', 'on_red') #字体颜色和背景颜色
# print(red_on_cyan('Hello, World!'))
# cprint('欢迎来到这里'.center(50,'-'),'red')