【Python】面向对象 ③ ( 构造函数 | 成员变量赋值问题 | 构造方法引入 | 构造函数可以同时定义成员变量 )





一、构造函数




1、成员变量赋值问题


在之前的博客中 , 定义的 Python 类 Student :

class Student:
    name = None  # 姓名
    age = None  # 年龄

    def info(self):
        print(f"姓名 : {
      
      self.name} , 年龄 : {
      
      self.age}")

如果要为其成员变量赋值 , 需要分别为 name 和 age 两个成员变量赋值 ,

s = Student()
s.name = "Tom"
s.age = 18

上述 2 个变量就写了 2 行代码 , 如果有十几个变量 , 那么就需要十几行代码 , 才能完成成员变量赋值的操作 ;


2、构造方法引入


使用构造方法 , 可以在一行代码内 , 为多个变量同时赋值 , 这样就可以减少代码量 ;


构造方法简介 :

  • 构造方法函数名 : Python 类 的构造方法是 __init__() 方法 , 该方法名称 在 init 单词前后各有两个下划线 _ ;

  • 构造方法调用时机 : 在创建 类 的 实例对象时 , 会自动执行 Python 类的 __init__() 构造方法 ;

  • 构造方法参数 : 创建对象时 , 如果传入参数 , 会自动将参数传递给 __init__() 构造方法使用 ;


3、代码示例 - 构造方法


在下面的代码中 , Student 类包含了 __init__ 构造方法 , 和 info 成员方法 ;

__init__() 构造方法中 , 接收两个参数 name 和 age , 分别赋值给 name 和 age 成员变量 ;

info() 方法中 , 将学生的 name 和 age 成员打印到控制台中 ;


代码示例 :

"""
面向对象 代码示例
"""


class Student:
    name = None  # 姓名
    age = None  # 年龄

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def info(self):
        print(f"姓名 : {
      
      self.name} , 年龄 : {
      
      self.age}")


s = Student("Tom", 18)
s.info()

执行结果 :

D:\001_Develop\022_Python\Python39\python.exe D:/002_Project/011_Python/HelloPython/Hello.py
姓名 : Tom , 年龄 : 18

Process finished with exit code 0

在这里插入图片描述


3、构造函数可以同时定义成员变量


在上述代码示例中 , 定义了 name 和 age 成员变量 ,

class Student:
    name = None  # 姓名
    age = None  # 年龄

这两个成员变量是可以省略的 ;

构造函数还有一个作用 , 就是定义成员变量 , 并为其赋值 ;

    def __init__(self, name, age):
        self.name = name
        self.age = age

下面的代码中 , 没有定义成员变量 , 直接在 __init__() 构造方法 中进行赋值 ;

代码示例 :

"""
面向对象 代码示例
"""


class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def info(self):
        print(f"姓名 : {
      
      self.name} , 年龄 : {
      
      self.age}")


s = Student("Tom", 18)
s.info()

执行结果 :

D:\001_Develop\022_Python\Python39\python.exe D:/002_Project/011_Python/HelloPython/Hello.py
姓名 : Tom , 年龄 : 18

Process finished with exit code 0

猜你喜欢

转载自blog.csdn.net/han1202012/article/details/131577804