一 类中的方法

1.1 介绍

(1) 普通方法

(2) 绑定方法

绑定到对象 (自动传递对象参数)

绑定到类 (自动传递类参数)

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

classPlane():def __init__(self,name):
self.name=name#绑定到对象
deffly(self):print ("plane can fly")#普通方法
defcapitain():print ("will have a capitain")#绑定方法(绑定到类)
@classmethoddefsave (cls):print ("will help people")#静态方法(对象,类都可以调用)
@staticmethoddefattack():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 obj=Plane()
TypeError:__init__() missing 1 required positional argument: 'name'
对象使用参数
classPlane():def __init__(self,name):
self.name=name#绑定到对象
deffly(self):print ("plane can fly")#普通方法
defcapitain():print ("will have a capitain")#绑定方法(绑定到类)
@classmethoddefsave (cls):print ("will help people")#静态方法(对象,类都可以调用)
@staticmethoddefattack():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 obj.capitain()
TypeError: capitain() takes 0 positional arguments but1 was given
1.2 绑定方法的调用
[root@node10 python]# cat test.py
classPlane():
def __init__(self,name):
self.name =name
#绑定到对象
deffly(self):
print ("plane can fly")
#普通方法
defcapitain():
print ("will have a capitain")
#绑定方法(绑定到类)
@classmethod
defsave (cls):
print ("will help people")
#静态方法(对象,类都可以调用)
@staticmethod
defattack():
print("some bad people use if for attack")
obj = Plane("benladeng")
#绑定方法的调用
obj.fly()
执行
[root@node10 python]# python3 test.py
plane can fly
由于方法fly只是简单的打印,就可以使用对象调用
classPlane():
def __init__(self,name):
self.name =name
#绑定到对象
deffly(self):
print ("plane can fly")
#普通方法
defcapitain():
print ("will have a capitain")
#绑定方法(绑定到类)
@classmethod
defsave (cls):
print ("will help people")
#静态方法(对象,类都可以调用)
@staticmethod
defattack():
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的参数就会报错(如果函数体里用到了该对象,类名调用的方式不可以.)
classPlane():
def __init__(self,name):
self.name =name
#绑定到对象
deffly(self):
#print ("plane can fly")
print ("plane can fly",self.name)
#普通方法
defcapitain():
print ("will have a capitain")
#绑定方法(绑定到类)
@classmethod
defsave (cls):
print ("will help people")
#静态方法(对象,类都可以调用)
@staticmethod
defattack():
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 Plane.fly(111)
File "test.py", line 7, infly
print ("plane can fly",self.name)
AttributeError: 'int' object has no attribute 'name'
1.3 绑定到类方法的调用
classPlane():def __init__(self,name):
self.name=name#绑定到对象
deffly(self):#print ("plane can fly")
print ("plane can fly",self.name)#普通方法
defcapitain():print ("will have a capitain")#绑定方法(绑定到类)
@classmethoddefsave (cls):print ("will help people")#静态方法(对象,类都可以调用)
@staticmethoddefattack():print("some bad people use if for attack")
obj= Plane("benladeng")#绑定到类方法的调用
Plane.save()
执行
[root@node10 python]#python3 test.py
will help people
打印出这个类
classPlane():def __init__(self,name):
self.name=name#绑定到对象
deffly(self):#print ("plane can fly")
print ("plane can fly",self.name)#普通方法
defcapitain():print ("will have a capitain")#绑定方法(绑定到类)
@classmethoddefsave (cls):print(cls)print ("will help people")#静态方法(对象,类都可以调用)
@staticmethoddefattack():print("some bad people use if for attack")
obj= Plane("benladeng")#绑定到类方法的调用
Plane.save()
执行
[root@node10 python]#python3 test.py
will help people
对象可以调用类中的属性和方法,但是类不能调用对象中的属性和方法
classPlane():def __init__(self,name):
self.name=name#绑定到对象
deffly(self):#print ("plane can fly")
print ("plane can fly",self.name)#普通方法
defcapitain():print ("will have a capitain")#绑定方法(绑定到类)
@classmethoddefsave (cls):
cls.nameprint(cls)print ("will help people")#静态方法(对象,类都可以调用)
@staticmethoddefattack():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 Plane.save()
File"test.py", line 14, insave
cls.name
AttributeError: type object'Plane' has no attribute 'name'
1.4 调用类中的属性
classPlane():
material= "合金"
def __init__(self,name):
self.name=name#绑定到对象
deffly(self):#print ("plane can fly")
print ("plane can fly",self.name)#普通方法
defcapitain():print ("will have a capitain")#绑定方法(绑定到类)
@classmethoddefsave (cls):print(cls.material)print ("will help people")#静态方法(对象,类都可以调用)
@staticmethoddefattack():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所归属的类找出来,然后把该类当成参数进行传递.
classPlane():
material= "合金"
def __init__(self,name):
self.name=name#绑定到对象
deffly(self):#print ("plane can fly")
print ("plane can fly",self.name)#普通方法
defcapitain():print ("will have a capitain")#绑定方法(绑定到类)
@classmethoddefsave (cls):print(cls.material)print ("will help people")#静态方法(对象,类都可以调用)
@staticmethoddefattack():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 静态方法的调用
classPlane():
material= "合金"
def __init__(self,name):
self.name=name#绑定到对象
deffly(self):#print ("plane can fly")
print ("plane can fly",self.name)#普通方法
defcapitain():print ("will have a capitain")#绑定方法(绑定到类)
@classmethoddefsave (cls):print(cls.material)print ("will help people")#静态方法(对象,类都可以调用)
@staticmethoddefattack():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 forattack
some bad people useif for attack
调用成功