zoukankan      html  css  js  c++  java
  • Python中self的用法

    在Python类中规定,函数的第一个参数是实例对象本身,并且约定俗成,把其名字写为self。其作用相当于java中的this,表示当前类的对象,可以调用当前类中的属性和方法。

    在python中,类是通过关键字 class 定义的:

    1、class 后面紧跟类名,紧接着是(object),表示该类是从哪个类继承下来的,通常,如果没有合适的继承类,就使用 object 类,这是所有类最终都会继承的类。

    class Person(object):  
      pass

    2、将 Person类实例化,创建实例化是通过 类名+() 实现的。

    class Person(object):  
      pass
    student = Person()  # 创建类的实例化
    print(student)
    print(Person)

    3、给实例变量绑定属性

    比如:为 student 绑定 name 和 sex属性

    class Person(object):  
      pass
    student = Person()
    # print(student)
    # print(Person)
    student.name = "Gavin"   # 为实例变量 student 绑定 name 属性,类似于赋值操作
    student.sex = 男    # 为其绑定 score 属性
    print(student.name)
    print(student.sex)

    上述的方法虽然可以为类的实例变量绑定属性,但是不够方便。

    由于类 可以起到模板的作用,所以在创建实例的时候,可以将我们认为必须绑定得属性强制填写进去,在python中,是通过类中通常都会使用的一个方法,即def __init__(self) 方法,在创建实例变量的时候,就把 name 和 sex等属性绑上去。

    class Person(object):  
      def __init__(self,name,sex):    
        self.name = name    
        self.sex = sex    
    student = Person('Gavin',男)  # 传入 __init__ 方法中需要的参数
    print(student.name)
    print(student.sex)

    传入空参数的情况,会报错:

    class Person(object):  
      def __init__(self,name,score):    
        self.name = name    
        self.sex = sex   
    student = Person()   # 此处应该有参数传入,却没有传
    print(student.name)
    print(student.sex)

    注意:

    1、__init__ 方法的第一个参数永远是 self ,表示创建的实例本身,因此,在 __init__ 方法的内部,就可以把各种属性绑定到 self,因为 self 就指向创建的实例本身。

    2、使用了 __init__ 方法,在创建实例的时候就不能传入 空的参数了,必须传入与 __init__ 方法匹配的参数,但是 self 不需要传,python解释器会自己把实例变量传进去。

    class Person(object):  
        def __init__(self,x,y):    
            self.x = x    
            self.y = y      
        def add(self):    
            sum = self.x + self.y    
            return sum    
        def square(self):    
            squr = pow(self.x,2)+pow(self.y,2)    
            return squr  
        def add_square(self):    
            c = self.add()+self.square()    
            return c    
    student = Person(3,4)
    print(student.add())
    print(student.square())
    print(student.add_square())                                

    运行结果:

    通过上述的例子可以看出,与普通的函数相比,在类中定义的函数只有两点不同:

    1、第一个参数永远是 self ,并且调用时不用传递该参数

    2、在类中函数相互调用要加 self ,如上例中: c = self.add()+self.square(), 不加 self ,会报错

     
  • 相关阅读:
    luogu P2570 [ZJOI2010]贪吃的老鼠【二分+最大流】
    luogu P5358 [SDOI2019]快速查询【模拟(?)】
    CF360E Levko and Game【贪心+dijsktra】
    bzoj 2632: [neerc2011]Gcd guessing game【贪心】
    bzoj 2535: [Noi2010]Plane 航空管制2【拓扑排序+堆】
    Amazon免费CE2基于docker部署nginx,并实现访问
    使用FlashFXP,密钥方式连接Amazon的CE2实例
    python 提示 AttributeError: module 'json' has no attribute 'dumps'
    ueditor工具栏新增按钮教程
    Express4+Mongodb超简单入门实例
  • 原文地址:https://www.cnblogs.com/ngxt/p/11876849.html
Copyright © 2011-2022 走看看