• def __init__(self, value) -> None:


    常见的两种类的定义方式如下:

    class Student:
        def __init__(self):#两者之间的区别
            self.name = None
            self.score = None
        def __init__(self, name, score):
            self.name = name
            self.score = score        


    区别很明显,前者在__init__方法中,只有一个self,指的是实例的本身,但是在方法的类部,包含两个属性,name, score

    下面的这个即是在定义方法时,就直接给定了两个参数,

    针对这样的两个,之前不解的地方,是如何实例化,第二个很明显就是直接实例化时,传入相应的参数,而第一种,则需要实例化之后,对属性进行赋值

    # student = Student("sansan", 90)
    student = Student()
    student.name= "sansan"
    student.score = 90
    
    # susan = Student("sunny", 78)
    susan = Student()
    susan.name = "susan"
    susan.score = 8


    即显示了两种实例化的方法, 注释的部分即是在创建的时候就直接传入参数

    那么这两者的区别,在哪里?

    • 第一种的区别,他定义了这样一种类,他可以是一个空的结构,比如学生的表,当学生还没有进行考试时,他已经有了学生的姓名和成绩,当新的数据来的时候,可以直接添加进来。这个可以很方便的进行,
    • 第二种,则需要必须传值,不允许为空。当然第二种对于已有数据的导入是很方便的,在语句上减少了很多
    class Student:
        def __init__(self):#两者之间的区别
            self.name = None
            self.score = None
    
    # def __init__(self, name, score):
    # self.name = name
    # self.score = score
    
    def print_score(self):
        print("%s score is %s" % (self.name, self.score))
    
    def get_grade(self):
        if self.score >= 80:
            return "A"
        elif self.score >= 70:
            return "B"
        else:
            return "C"
    
    # student = Student("sansan", 90)
    student = Student()
    student.name= "sansan"
    student.score = 90
    
    # susan = Student("sunny", 78)
    susan = Student()
    susan.name = "susan"
    susan.score = 8
    
    student.print_score()
    susan.print_score()
    print(susan.get_grade())
    print(student.get_grade())        


    以上是一个很简单的,两者比较,

    两者都在上述代码中进行了简单的实现,自己进行相应的注释

     ->常常出现在python函数定义的函数名后面,为函数添加元数据,描述函数的返回类型,从而方便开发人员使用。比如:

         通常的写法是:

    def attrs(self) -> _Attrs:
    pass
    这种写法通常是写在函数的函数名后面 

    def add(x, y) -> int:
    return x+y
    这里面,元数据表明了函数的返回值为int类型。
    ,-> _Attr则表明函数返回的是一个外部可访问的类的私有变量。

  • 相关阅读:
    总结:工作 + 学习 (2019年)
    JVM 理解性学习(一)
    渗透神器cobalt strike在数字杀软环境下的使用
    普通路由器刷开源固件DD-WRT的简单过程
    云烟渗透题总结
    对thinkphp5.0框架的实例学习
    内网渗透 关于GPO
    简单尝试利用维控LeviStudioU的一栈缓冲区溢出漏洞
    试写foxit reader的ConvertToPDF功能的wrapper
    第05章下 加载内核
  • 原文地址:https://www.cnblogs.com/liruilong/p/12875515.html
Copyright © 2020-2023  润新知