Python基础核心经典教程(030)——类属性与类方法


版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址:http://blog.csdn.net/lfdfhl

概述

我们来回顾一下之前创建对象的流程及方式:

  • 1、创建类
  • 2、利用类名( )创建对象
    在调用类名( )时系统在内存中为对象分配内存并调用- - init - -方法初始化对象
  • 3、当调用类名( )后,内存中就存在了一个对象
  • 4、可通过对象名.方法名( )调用方法

这个创建对象的过程也称为对象实例化的过程,常用描述如下:

  • 创建的对象叫做类的实例
  • 创建对象的过程叫做对象的实例化
  • 对象也可称为实例或实例对象
  • 对象的属性叫做实例属性
  • 对象调用的方法叫做实例方法

通过一个类可以创建多个对象,每个对象都有自己独立的内存空间,拥有自己的属性。每个对象之间的属性相互独立,互不干扰;图示如下:

在这里插入图片描述
小 结

  • 1、每个对象都有自己独立的内存空间,保存各自不同的属性
  • 2、多个对象的方法,在内存中只有一份。在调用方法时需把对象的引用self传递到方法内部

类对象

在Pyhont中万物皆对象,一切都是对象。其实,我们之前定义的类也是一个对象;只不过这个对象有些特殊,它叫做类对象;概述如下:

  • 1、在程序运行时,类(类对象)也会被加载到内存中
  • 2、在程序运行时,在内存中只有一个类对象
  • 3、使用类(类对象)可以创建出一个或多个实例
  • 4、在类对象中除了实例的属性和方法外,类对象还可拥有自己的属性(类属性)和方法(类方法)
  • 5、可通过类名.属性类名.方法名( )访问类属性或调用类方法

类属性

类属性通常用于描述类相关的特征,它与具体的对象关系不大。换句话说:如果各个对象具有一个相同的特征;那么,可将该特征定义为类属性。

访问类属性的方式:

  • 1、类名.类属性(常用方式)
  • 2、对象名.类属性(不推荐)

示例如下:

"""
原创作者:谷哥的小弟
博客地址:http://blog.csdn.net/lfdfhl
示例描述:面向对象——类属性
"""


# 定义学生类
class Student:
    # 类属性
    country = "China"
    # 类属性
    total = 0

    def __init__(self, name):
        self.name = name
        # 修改类属性
        Student.total = Student.total + 1


# 创建对象
s1 = Student("lucy")
# 获取对象的属性
name1 = s1.name
# 获取类属性
country = Student.country
# 获取类属性
total = Student.total
print("新建学生%s,学生国籍%s,学生总数%d" % (name1, country, total))

# 创建对象
s2 = Student("jack")
# 获取对象的属性
name2 = s2.name
# 获取类属性
country = Student.country
# 获取类属性
total = Student.total
print("新建学生%s,学生国籍%s,学生总数%d" % (name2, country, total))

在这里插入图片描述

类方法

类方法通常用于描述类相关的行为,它与具体的对象关系不大。换句话说:如果各个对象具有一个相同的行为;那么,可将该行为定义为类方法。

语法如下:

@classmethod
def 类方法名(cls):
    pass

该语法要点如下:

  • 1、使用 @classmethod 标识类方法
  • 2、类方法第一个参数为cls,该参数与实例方法的参数self非常类似。cls代表的是调用该类方法的类。
  • 3、在调用类方法时不需要传递cls

调用类方法的方式:

  • 1、类名.类方法名( )(常用方式)
  • 2、对象名.类方法名( )(不推荐)

示例如下:

"""
原创作者:谷哥的小弟
博客地址:http://blog.csdn.net/lfdfhl
示例描述:面向对象——类方法
"""


# 定义学生类
class Student:
    # 类属性
    country = "China"
    # 类属性
    total = 0
    
    # 类方法
    @classmethod
    def printInfo(cls):
        print("学生国籍%s,学生总数%d" % (Student.country, Student.total))
    pass

    def __init__(self, name):
        self.name = name
        # 修改类属性
        Student.total = Student.total + 1


# 创建对象
s1 = Student("lucy")
# 获取对象的属性
name1 = s1.name
# 获取类属性
country = Student.country
# 获取类属性
total = Student.total
print("新建学生%s,学生国籍%s,学生总数%d" % (name1, country, total))

# 调用类方法
Student.printInfo()

在这里插入图片描述

静态方法

在类中如果一个方法既不访问实例属性也不访问类属性并且既不调用实例方法也不调用类方法,那么可以将该方法定义为静态方法。

语法如下:

@staticmethod
def 静态方法名():
    pass

该语法中使用 @staticmethod标识静态方法。

调用静态方法的方式:

  • 1、类名.静态方法名( )(常用方式)
  • 2、对象名.静态方法名( )(不推荐)

示例如下:

"""
原创作者:谷哥的小弟
博客地址:http://blog.csdn.net/lfdfhl
示例描述:面向对象——静态方法
"""


# 定义学生类
class Student:
    # 类属性
    country = "China"
    # 类属性
    total = 0

    # 类方法
    @classmethod
    def printInfo(cls):
        print("学生国籍%s,学生总数%d" % (Student.country, Student.total))

    pass

    # 静态方法
    @staticmethod
    def tip():
        print("开始录入学生信息")

    pass

    def __init__(self, name):
        self.name = name
        # 修改类属性
        Student.total = Student.total + 1


# 调用静态方法
Student.tip()

# 创建对象
s1 = Student("lucy")
# 获取对象的属性
name1 = s1.name
# 获取类属性
country = Student.country
# 获取类属性
total = Student.total
print("新建学生%s,学生国籍%s,学生总数%d" % (name1, country, total))

# 调用类方法
Student.printInfo()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lfdfhl/article/details/106134345
今日推荐