(1条消息) Python笔记 class中的

Python中的init的含义

之前一直不理解__init__()方法的作用核意义,今天看了一些别人写的博客,对这个内容学习了一下。

init()方法有两个方面的重大意义:1. 在对象生命周期中初始化;每个对象必须正确初始化后才能正常工作。2. init()参数值可以有多种形式。

__init__有点像C#中的构造函数,在类实例创建后立即调用。

class Student:
    def __init__(self,number):
        self.number=number
    def student_number(self):
        print('number:',self.number)

student=Student(34)
student.student_number()

在这里,我们把__init__方法定义为有一个参数number和self,它创建一个新域number,self为指向类本身。这个过程中,通过self.number=number将数据封装在类中,调用时直接时直接通过类Student进行调用。

那么,如果不用__init__()方法定义类会怎么样呢? geerniya在他的博客对这块内容作了如下解释:

  1. 不用__init__()方法定义类
class Student:
    def student_info(self,name,number):
        print('name: {}, number: {}'.format(name,number))

student=Student()
student.student_info('zhang',34)
print(student.__dict__)

输出结果为

name: zhang, number: 34
{}

虽然不用__init__()方法也能正常实现要求,但查看这个实例的属性竟然是空的。在实例化对象的时候,student=Student()的参数是空的,只有在调用函数的时候才指定,并且类中定义的方法都有参数,明显不是很便捷。

  1. 用__init__()方法定义类
class Student:
    def __init__(self,name,number):
        self.name=name
        self.number=number

    def student_info(self):
        print('name: {}, number: {}'.format(self.name,self.number))

student=Student('zhang',34)
student.student_info()
print(student.__dict__)

输出

name: zhang, number: 34
{'name’: 'zhang’, 'number’: 34}

定义完后,每个实例都有自己的属性(name,number),可以直接调用类中的函数。

init(self,参数)和__init__(self)区别

  1. 定义
    两种类型的init定义方式如下
class Person:
#     def __init__(self):
#         self.name=None
#         self.gender=None
#         self.age=None

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

    def print_info(self):
        if str.lower(self.gender)=='female':
            print('Her name is {}, she is {} years old'.format(self.name,self.age))
        elif str.lower(self.gender)=='male':
            print('His name is {}, he is {} years old'.format(self.name,self.age))
        else:
            print('ERROR')

前者__init__()方法中只有self,但在方法的类部包含三个属性。而后者在定义方法的时候,直接给定两个参数。
2. 实例化
两者的实例化方法如下:

#person=Person()
#person.name='lisa'
#person.gender='female'
#person.age=18
#person.print_info()

person2=Person('lisi','male',20)
person2.print_info()

两者的主要区别:
前者定义类可以是一个空结构,当有输入进来的时候再添加相应的数据
后者则必须传值,不予许为空值,例如

person2=Person()
person2.print_info()

输出将会报错

TypeError: init() missing 3 required positional arguments: 'name’, 'gender’, and 'age’

相关博客和学习网站

[1] 廖雪峰官网https://www.liaoxuefeng.com/wiki/1016959663602400/1017496031185408
[2]详细解读Python中的__init__()方法https://www.cnblogs.com/insane-Mr-Li/p/9758776.html
[3] python学习——类中为什么要定义__init__()方法.https://blog.csdn.net/geerniya/article/details/77487941
[4]python def init(self, name等多参数), def init(self)https://blog.csdn.net/m0_37693335/article/details/82972925

(0)

相关推荐

  • Python学习:__repr__和__str__区别

    https://blog.csdn.net/nanhuaibeian/article/details/86694581 文章目录 一. `__repr__` 二. `__str__` 三.总结 一. ...

  • (1条消息) python常见图形代码可视化大全整理(包括动图)更新中...

    目录 一.离散型变量的可视化 1 饼图 1.1 matplotlib模块 1.2 panda模块 2 条形图 2.1 matplotlib模块 2.1.1 垂直或水平条形图 2.1.2 堆叠条形图 2 ...

  • (4条消息) python中import re

    一.什么是正则表达式? 正则表达式,又称规则表达式,通常被用来检索.替换那些符合某个模式(规则)的文本. 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合, ...

  • (3条消息) python 基础笔记之 loc和iloc

    DataFrame就是一张二维表,其中有行和列,行(biu准说法为:索引),列(标签),数据的读取分为: 读取一行数据,读取多行数据 读取一个数据,读取多个数据 以下面的DataFrame数据为例: ...

  • (7条消息) Ubuntu16.04系统中创建新用户

    转载:https://blog.csdn.net/timothy93bp/article/details/77679000 本文基于Linux的Ubuntu系统新建一个普通用户,linux系统的用户名 ...

  • (16条消息) C# 从补码中获取有符号数的实际数值

    原理 计算机存储数据时,默认是存储数据的补码.有符号的数粗存在符号位(最高位). 这里就会提到原码.反码.补码的概念. 原码:用符号位和数值表示带符号数,正数的符号位用"0"表示, ...

  • (3条消息) Python实现

    二次函数拟合--最小二乘法公式法 与线性回归相似,对二次函数进行拟合某种意义上也只是加了一个函数,虽然求解的方程变得更加繁琐,需要准备的变量也增加到了七个. 思路有借鉴于:最小二乘法拟合二次曲线 C语 ...

  • (2条消息) Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)

    ahilll 2018-08-09 10:11:22 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 二.Tkinte ...

  • (1条消息) python的江湖世界

    原创不易,侵权有究,转载请备注链接和原作者 https://blog.csdn.net/gkbxs/article/details/115490719 天下武功数少林,天外有天生奇云,在编程的世界里微 ...

  • (4条消息) python爬虫之bs4的基本使用

    BeautifulSoup可以很方便地查找HTML标签以及其中的属性和内容 import requests from bs4 import BeautifulSoup # 创建BeautifulSou ...