码迷,mamicode.com
首页 > 编程语言 > 详细

031.Python类中的方法

时间:2020-02-22 11:40:02      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:cap   test   error   调用   file   ace   color   self   ade   

一 类中的方法

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

调用成功

031.Python类中的方法

标签:cap   test   error   调用   file   ace   color   self   ade   

原文地址:https://www.cnblogs.com/zyxnhr/p/12333529.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!