1 问题描述
为了统计学生人数,可以给Student类增加一个类属性,每创建一个实例,该属性自动增加:
class Student(object):
count = 0
def __init__(self, name):
self.name = name
Student.count += 1
stu1 = Student('小刚', 18)
2 解题提示
本题主要是对类实例,类属性,类方法的认识
- 参考本模块第一节 类和实例、访问限制、属性和方法、成员属性和类属性
- 定义一个变量用来计数,每添加一个实例,就让这个变量 +1
- 查看这个属性(类名.属性名)
3 评分标准
- 本题共计30分
- 实现count数的增加20分
- 代码注释、规范10分
4 要点解析
4.1 命名规则
# # 类名的书写规范,建议使用驼峰命名法
# 大驼峰:MyCar XiaoMi
class MyCart():
pass
# 小驼峰:myCar xiaoMi
class myCart():
pass
# # 如果只是用一个词来命名,首字母要大写
class Cart():
pass
4.2 面向对象、面向过程
面向对象编程——Object Oriented Programming,简称
OOP
,是一种以对象为中心的程序设计思想。面向过程编程——Procedure Oriented Programming,简称
POP
,是一种以过程为中心的程序设计思想。
分析问题中需要的抽象模型,然后将需要的功能分别去创建模型对象,最终由模型对象来完成程序
优缺点:
分析解决问题的步骤,然后一步步去实现
优缺点:
- 优点: 将负责的问题流程化,进而实现简答化
- 缺点:扩展性差(更新,维护,迭代)
4.3 类
类 :对一类事物的描述,是抽象的、概念上的定义。
# 创建类,类主要由类名,属性,方法组成,当然创建一个类时,属性和方法可以选择的。
class Person:
count = 1
def speak(self):
print("I can speak")
# 创建对象
tom =Person() #创建对象,直接类名()
tom.speak()
4.4 类属性,实例属性
- 定义的位置不同,类属性直接定义在类中,对象属性定义在构造函数中
- 访问方式不同,类属性使用类名直接访问,对象属性使用对象访问
class Student(object):
#类属性直接定义在类中
count = 0
def __init__(self,name):
#实例【对象】属性定义在构造函数中
self.name = name
# 查看类属性
print(Student.count)
# 创建实例【对象】
xm = Student('小明')
# 通过创建的对象来访问对象属性
print(xm.name)
4.5 self
-
self只有在类的方法中才会有,独立的函数或方法是不必带有self的。
-
self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。
-
self指的是类实例对象本身,不是类本身。
4.6 有object与无object
在python2中,class(object)定义时,class继承了object()的属性;
在python3中,class()默认继承了object()
class A:
"""
不带object
"""
name = "zhengtong"
class B(object):
"""
带有object
"""
name = "chonghong"
if __name__ == "__main__":
a = Person()
print("A", dir(a))
b = B()
print("B", dir(b))
5 代码实现
# 创建一个学生类
class Student(object):
#类属性直接定义在类中
count = 0
def __init__(self,name):
# 实例【对象】属性定义在构造函数中
self.name = name
# 每次创建一个对象,类属性的count+1
Student.count += 1
# 查看类属性
print(Student.count)
# 创建实例【对象】
xm = Student('小明')
# 通过创建的对象来访问对象属性
print(xm.name)
# 创建一个对象之后,再次查看类属性
print(Student.count)