1.面向对象程序设计(OOP)
(1)def 函数名称(参数),创建函数的动作,并将参数代入函数中,以下设计一个函数fun2,并且在程序中调用该函数。
(2)回传值=def函数名称(参数),创建函数的动作,将参数代入函数中,并且回传数据。以下设计一个函数fun3,并且在程序中调用该函数。请注意顺序和参数的用法。
python
def fun1():
print("This is function1")
fun1()
def fun1():
print("This is function1")
fun1()
def fun3(num1=0,num2=0):
return (num1*2)+num2
print(fun3(1,2))
print(fun3(num2=1,num1=2))
print(fun3(num2=1))
a=fun3()
print(a)
def fun4():
return 1,2
a,b=fun4()
print(a)
print(b)
def fun3(n1,n2):
print(str(n1)+"*"+str(n2)+"="+str(n1*n2))
x=0
while x<9:
x=x+1
y=1
while y<10:
fun3(x,y)
y=y+1
注意:fun3(2,1)同fun3(num1=2,num2=1))与fun3(num2=1,num1=2))传递过去的参数和结果都是一样的。
2.import导入和开发
import是非常重要的Python功能,除了可以导入其他第三方的函数库,还可以把本身的函数独立成另外一个文件。比如,把函数fun3放在另外一个文件MyFun.py中,以后使用时只要通过importMyFun,就能使用MyFun.fun3()函数。
python
import MyFun
a=MyFun.fun3(1,2)
print(a)
- 类(class)
(1)初始化类"init"称为建构方法。在Python设置类的时候,一定要预定义"def__init__(self):"函数来处理初始化的类功能,它没有回传值。建构方法的作用是在建构对象的同时,也可以初始化一些必要的信息。
(2)如果要在初始化时带上预定义值,就需要在"init"初始化函数中把类的参数放入,如"init(self,name):"就能把name放入。
(3)类中的新增函数方法与一般函数类似,只需要在函数方法的参数中多加一个self参数。Python中所有的类成员(包含其数据成员)都是公开(public)的,成员函数的声明必须在第一个参数中使用self,以表示存在其中的对象,而此参数在调用时是不用回传的。
(4)属性是对象的静态描述,因为Python的属性默认都是公开的,所以都可以取得。在使用时需要通过self才会取得该类中的属性。
python
class MyClass(object):
def __init__(self):
print("hello")
g=MyClass()
class MyClass(object):
def __init__(self,name):
print('hello'+str(name))
g=MyClass("Powen")
class MyClass(object):
def __init__(self,name):
print("hello"+str(name))
def fun1(self):
print("fun1")
def fun3(self,num1=0,num2=0):
return (num1*2)+num2
g=MyClass("Powen")
g.fun1()
print(g.fun3(1,2))
print(g.fun3(num2=1,num1=2))
(5)在类中的数据及交互方法,统称为类成员,只要多加一个self即可,而在类中调用其他的函数方法也是通过slef来完成的
python
class MyClass(object):
mX=1
mY=1
def __init__(self,x,y):
self.mX=x
self.mY=y
def fun1(self):
s=""
for x in range(self.mX,10,1):
for y in range(self.mY,10,1):
self.fun2(x,y)
def fun2(self,x,y):
s=str(x)+"*"+str(y)+"="+str(x*y)
print(s)
g=MyClass(8,8)
g.fun1()
(6) 设置公开、私有的类函数方法
在Python的类中,所有的函数方法和属性都是公开的。如果要设置为私有,只需命名时在类函数名称前面添加两个下画线(__)即可。
python
class MyClass(object):
mMyPub=1
__mMyPri=1
def __init__(self,x,y):
self.mMyPub=x
self.__mMyPri=y
def funPub(self):
print("fun1")
def __funPri(self):
print("fun2")
g=MyClass(7,7)
print(g.mMyPub)
g.funPub()
(7)为了维护程序的便利性,会推荐把类独立成另外一个文件,以后使用时只要通过import调用该类即可。类的文件的名称推荐与类名称相同。
python
from MyClass import MyClass
g=MyClass(8,8)
g.fun1()
2.继承
(1)继承是指Sub Class(子类)继承Super Class(父类)后,就会自动取得父类特性。当新增class时,把要继承的父类放在object就能完成,可以通过以下程序来了解。使用5.9节的程序,更换成调用MyClass就能够继承MyClass的类。
python
class MyClass(object):
def __init__(self,name):
print("MyClass"+str(name))
def fun1(self):
print("MyClass->fun1")
class MyClassChild(MyClass):
def __init__(self, name):
print("MyClassChild"+str(name))
def fun2(self):
print("MyClassChild->fun2")
g=MyClassChild("powen")
g.fun1()
g.fun2()
(2)Python也可以有多重继承,本节实例中将展示同时继承的方法:可同时拥有两个或两个以上的父类。
python
class MyClass(object):
def fun1(self):
print("MyClass->fun1")
class MyClass2(object):
def fun2(self):
print("MyClass2->fun2")
class MyClassChild(MyClass,MyClass2):
def __init__(self,name):
print("MyClassChild"+str(name))
def fun3(self):
print("MyClassChild->fun3")
g=MyClassChild("powen")
g.fun1()
g.fun2()
g.fun3()
(3)Python提供调用父类函数super,但是在Python2和Python 3中的用法就不一样,方法如下:
super().fun2() #针对Python 3的调用父类函数方法
super(MyClassChild,self).fun2() #针对Python 2的调用父类函数方法
在一个程序中,Python2和Python 3如何同时运行呢?可以通过以下技巧来达到目的。try
python
class MyClass(object):
def fun1(self):
print("MyClass->fun1")
def fun2(self):
print("MyClass2->fun2")
class MyClassChild(MyClass):
def __init__(self,name):
print("MyClassChild"+str(name))
def fun2(self):
try:
super().fun2()
except:
super(MyClassChild,self).fun2()
print("MyClassChild->fun2")
g=MyClassChild("powen")
g.fun1()
g.fun2()
本节实例将展示如何处理和调用父类的属性(Property),同样也可以调用父类函数super,如print(super(MyClassChild,self).value3)。
python
class MyClass(object):
value3=3
def fun1(self):
print("MyClass->fun1")
def fun2(self):
print("MyClass->fun2")
class MyClassChild(MyClass):
value3=13
def __init__(self,name):
print("MyClassChild"+str(name))
def fun2(self):
try:
super().fun2()
except:
super(MyClassChild,self).fun2()
print("MyClassChild->fun3")
print(self.value1)
print(self.value2)
print(self.value3)
#print(super(MyClassChild,self).value3)
g=MyClassChild("powen")
g.fun1()
g.fun2()
这段代码一直报错不知道怎么回事 ,有没有大神能解答一下呢