• 031.Python类中的方法


    一 类中的方法

    1.1 介绍

    (1) 普通方法
    (2) 绑定方法

    1. 绑定到对象 (自动传递对象参数)
    2. 绑定到类 (自动传递类参数)

    (3) 静态方法 (无论类还是对象,都可以调用)

    class Plane():
            def __init__(self,name):
                    self.name = name
            #绑定到对象
            def fly(self):
                    print ("plane can fly")
            #普通方法
            def capitain():
                    print ("will have a capitain")
            #绑定方法(绑定到类)
            @classmethod
            def  save (cls):
                    print ("will help people")
            #静态方法(对象,类都可以调用)
            @staticmethod
            def attack():
                    print("some bad people use if for attack")
    obj = Plane()
    
    #普通方法的调用只能使用类来调用,因为没有参数
    Palne.capitain()

    执行

    [root@node10 python]# python3 test.py
    Traceback (most recent call last):
      File "test.py", line 18, in <module>
        obj = Plane()
    TypeError: __init__() missing 1 required positional argument: 'name'

    对象使用参数

    class Plane():
            def __init__(self,name):
                    self.name = name
            #绑定到对象
            def fly(self):
                    print ("plane can fly")
            #普通方法
            def capitain():
                    print ("will have a capitain")
            #绑定方法(绑定到类)
            @classmethod
            def  save (cls):
                    print ("will help people")
            #静态方法(对象,类都可以调用)
            @staticmethod
            def attack():
                    print("some bad people use if for attack")
    obj = Plane("benladeng")
    
    #普通方法的调用,只能使用类来调用,因为没有参数
    Plane.capitain()
    obj.capitain()       #这里会默认传参,不能一一对应

    执行

    self 系统会默认传递,但是新参没有,不能一一对应

    [root@node10 python]# python3 test.py
    will have a capitain
    Traceback (most recent call last):
      File "test.py", line 22, in <module>
        obj.capitain()
    TypeError: capitain() takes 0 positional arguments but 1 was given

    1.2 绑定方法的调用

    [root@node10 python]# cat test.py
    class Plane():
            def __init__(self,name):
                    self.name = name
            #绑定到对象
            def fly(self):
                    print ("plane can fly")
            #普通方法
            def capitain():
                    print ("will have a capitain")
            #绑定方法(绑定到类)
            @classmethod
            def  save (cls):
                    print ("will help people")
            #静态方法(对象,类都可以调用)
            @staticmethod
            def attack():
                    print("some bad people use if for attack")
    obj = Plane("benladeng")
    
    #绑定方法的调用
    obj.fly()

    执行

    [root@node10 python]# python3 test.py
    plane can fly

    由于方法fly只是简单的打印,就可以使用对象调用

    class Plane():
            def __init__(self,name):
                    self.name = name
            #绑定到对象
            def fly(self):
                    print ("plane can fly")
            #普通方法
            def capitain():
                    print ("will have a capitain")
            #绑定方法(绑定到类)
            @classmethod
            def  save (cls):
                    print ("will help people")
            #静态方法(对象,类都可以调用)
            @staticmethod
            def attack():
                    print("some bad people use if for attack")
    obj = Plane("benladeng")
    
    #绑定方法的调用
    obj.fly()
    Plane.fly(111)

    执行

    [root@node10 python]# python3 test.py
    plane can fly
    plane can fly

    当带有self的参数就会报错(如果函数体里用到了该对象,类名调用的方式不可以.)

    class Plane():
            def __init__(self,name):
                    self.name = name
            #绑定到对象
            def fly(self):
                    #print ("plane can fly")
                    print ("plane can fly",self.name)
            #普通方法
            def capitain():
                    print ("will have a capitain")
            #绑定方法(绑定到类)
            @classmethod
            def  save (cls):
                    print ("will help people")
            #静态方法(对象,类都可以调用)
            @staticmethod
            def attack():
                    print("some bad people use if for attack")
    obj = Plane("benladeng")
    
    #绑定方法的调用
    Plane.fly(111)

    执行

    [root@node10 python]# python3 test.py
    Traceback (most recent call last):
      File "test.py", line 22, in <module>
        Plane.fly(111)
      File "test.py", line 7, in fly
        print ("plane can fly",self.name)
    AttributeError: 'int' object has no attribute 'name'

    1.3 绑定到类方法的调用

    class Plane():
            def __init__(self,name):
                    self.name = name
            #绑定到对象
            def fly(self):
                    #print ("plane can fly")
                    print ("plane can fly",self.name)
            #普通方法
            def capitain():
                    print ("will have a capitain")
            #绑定方法(绑定到类)
            @classmethod
            def  save (cls):
                    print ("will help people")
            #静态方法(对象,类都可以调用)
            @staticmethod
            def attack():
                    print("some bad people use if for attack")
    obj = Plane("benladeng")
    
    #绑定到类方法的调用
    Plane.save()

    执行

    [root@node10 python]# python3 test.py
    will help people

    打印出这个类

    class Plane():
            def __init__(self,name):
                    self.name = name
            #绑定到对象
            def fly(self):
                    #print ("plane can fly")
                    print ("plane can fly",self.name)
            #普通方法
            def capitain():
                    print ("will have a capitain")
            #绑定方法(绑定到类)
            @classmethod
            def  save (cls):
                    print (cls)
                    print ("will help people")
            #静态方法(对象,类都可以调用)
            @staticmethod
            def attack():
                    print("some bad people use if for attack")
    obj = Plane("benladeng")
    
    #绑定到类方法的调用
    Plane.save()

    执行

    [root@node10 python]# python3 test.py
    <class '__main__.Plane'>
    will help people

    对象可以调用类中的属性和方法,但是类不能调用对象中的属性和方法

    class Plane():
            def __init__(self,name):
                    self.name = name
            #绑定到对象
            def fly(self):
                    #print ("plane can fly")
                    print ("plane can fly",self.name)
            #普通方法
            def capitain():
                    print ("will have a capitain")
            #绑定方法(绑定到类)
            @classmethod
            def  save (cls):
                    cls.name
                    print (cls)
                    print ("will help people")
            #静态方法(对象,类都可以调用)
            @staticmethod
            def attack():
                    print("some bad people use if for attack")
    obj = Plane("benladeng")
    
    #绑定到类方法的调用
    Plane.save()

    执行

    [root@node10 python]# python3 test.py
    Traceback (most recent call last):
      File "test.py", line 24, in <module>
        Plane.save()
      File "test.py", line 14, in save
        cls.name
    AttributeError: type object 'Plane' has no attribute 'name'

    1.4 调用类中的属性

    class Plane():
            material = "合金"
            def __init__(self,name):
                    self.name = name
            #绑定到对象
            def fly(self):
                    #print ("plane can fly")
                    print ("plane can fly",self.name)
            #普通方法
            def capitain():
                    print ("will have a capitain")
            #绑定方法(绑定到类)
            @classmethod
            def  save (cls):
                    print (cls.material)
                    print ("will help people")
            #静态方法(对象,类都可以调用)
            @staticmethod
            def attack():
                    print("some bad people use if for attack")
    obj = Plane("benladeng")
    
    #绑定到类方法的调用
    Plane.save()

    执行

    [root@node10 python]# python3 test.py
    合金
    will help people

    1.5 对象调用

    先把obj所归属的类找出来,然后把该类当成参数进行传递.

    class Plane():
            material = "合金"
            def __init__(self,name):
                    self.name = name
            #绑定到对象
            def fly(self):
                    #print ("plane can fly")
                    print ("plane can fly",self.name)
            #普通方法
            def capitain():
                    print ("will have a capitain")
            #绑定方法(绑定到类)
            @classmethod
            def  save (cls):
                    print (cls.material)
                    print ("will help people")
            #静态方法(对象,类都可以调用)
            @staticmethod
            def attack():
                    print("some bad people use if for attack")
    obj = Plane("benladeng")
    
    #绑定到类方法的调用
    Plane.save()
    obj.save()

    执行

    [root@node10 python]# python3 test.py
    合金
    will help people
    合金
    will help people

    1.6 静态方法的调用

    class Plane():
            material = "合金"
            def __init__(self,name):
                    self.name = name
            #绑定到对象
            def fly(self):
                    #print ("plane can fly")
                    print ("plane can fly",self.name)
            #普通方法
            def capitain():
                    print ("will have a capitain")
            #绑定方法(绑定到类)
            @classmethod
            def  save (cls):
                    print (cls.material)
                    print ("will help people")
            #静态方法(对象,类都可以调用)
            @staticmethod
            def attack():
                    print("some bad people use if for attack")
    obj = Plane("benladeng")
    #静态方法的调用
    obj.attack()
    Plane.attack()

    执行

    [root@node10 python]# python3 test.py
    some bad people use if for attack
    some bad people use if for attack

    调用成功

  • 相关阅读:
    android自定义透明dialog菜单
    webserice bug大全
    android五大布局居中对齐方式
    解决vs2010无法找到html页的问题
    android 旋转按钮和旋转变化动画
    android上画方框
    与Python有关的 备忘
    Python存取XML方法简介
    转载dll与lib之间的区别
    MSVCP100.dll 丢失的问题
  • 原文地址:https://www.cnblogs.com/zyxnhr/p/12333529.html
Copyright © 2020-2023  润新知