python:面向对象——类成员
1、介绍
所谓类成员,就是:在类的外部可以使用 【类名.属性名/方法名】 获取和调用,或者也可以通过实例对象获取和调用的属性和方法我们称之为类属性,其作用就是:供该类的实例对象之间共享
2、类属性
(1)含义
类属性:定义在类中且方法体之外的变量我们称之为类变量或者类属性,并且不用使用self对象实例修饰,因为它本身就不属于实例对象。
(2)定义格式:
class Person(object):
# 1、定义在类中,且方法体之外
# 2、不使用对象实例self修饰
name = "小明"
3、类方法
(1)含义
类方法:定义在类中,使用 @classmethod 修饰器修饰,并且第一个参数不是self,而是cls的方法我们称之为类方法,cls就是class的简写。 那么在对象方法中第一个参数self表示当前实例对象本身,那么在类方法中,cls就表示当前该类
(2)定义格式
class Person(object):
# 私有类属性
__name = "小明"
# 类方法
# 1、使用修饰器 @classmethod修饰
# 2、方法第一个参数为cls
@classmethod
def get_name(cls):
return Person.__name
4、调用
1. 在外部 通过 【类名.属性名/方法名】 获取和调用,同时也可以通过实例对象获取和调用
2. 类属性不能在外部通过实例对象直接修改,但是可以通过类方法修改。但是一般我们不会这样做,因为类属性是供实例对象之间共同共享的
3. 对象成员不能使用【类名.属性名/方法名】来获取和调用
5、案例
**需求:**假设我有一个班级类和一个学生类,想要实现的功能为:
1、班级类含有方法:
(1)执行班级人数增加的操作
(2)获取班级的总人数
2、学生类继承自班级类,每实例化一个学生,班级内的学生人数增加一个
3、最后,定义一些学生,获取班级中的总人数
**思考:**这个问题用类方法做比较好,因为我实例化的是学生,如果我从一个学生的实例中获取班级的人数是不合理的,所以要从班级获取,那么这个班级中的方法就是类方法。
# 定义一个班级类
class Class(object):
# 刚开始班级总人数为0
__num = 0
# 增加学生人数
@classmethod
def add_num(cls):
cls.__num += 1
# 获取学生人数
@classmethod
def get_num(cls):
return cls.__num
# 每个学生都继承自这个班级
class Student(Class):
# 每创建一次就证明这个班级新来了一个新同学
def __init__(self,name):
# 那么就设置该同学的姓名
self.name = name
# 通过类调用类方法(添加学生人数的方法)
Class.add_num()
# 实例化学生
xm = Student("小明")
zs = Student("张三")
# 获取并输出学生人数
print(xm.get_num())