1.类和对象:
类对象支持两种操作:属性引用和实例化。
属性引用:obj.name
构造方法:类会定义一个名为__int__()的特殊方法如下
def __init__(self):
self.data=[]
类定义了__init__()方法的话,类的实例化操作会自动调用__init__()的方法。如下所示:
X=Class()
当然,__init__()方法可以有参数,参数通过__init__()传递到类的实例化操作上。如下所示:
class All:
def __init__(self,realpart,imagpart):
self.r=realpart
self.i=imagpart
X=All(2,3.2)
print(X.r,X.i)
这样我们就把值传递到了X上,输出的结果为:2 3.2
看到这里,我们也许会对self产生疑问,下面我们就对self 进行解释:
self代表类的实例,奥不是类,代表的是当前对象的地址,self.class则指向类
这里要注意的是self并不是python的关键字,我们把它化成we也是可以的,只不过我们
规定用self。
2.类的方法
在类的内部,使用def关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数,self代表的是
类的实例。
class man:
name=''
age=''
__weigth=0(__. 属性为私用的属性,在内部类无法进行直接访问)
def __init__(self,n,a,w):
self.name=n
self.age=a
self.__weigth=w
def speak(self):
print("%ssay:I am%do ld。"%(self.name,self.age))
下面我们来实例化:
p=man('xiaodong',20,170)
p.speak()
以上代码的输出为:
xiaodong say:i am 20 old
如果我们想要输出__weight,却是没有结果的,该属性只用在 man中使用
3.类的继承:
python的基类中如果有相同的方法名,但是在子类中使用时却没有指定,python从左到右搜索就方法在子类中没有找到时,查找基类中是否包含方法
如下:
class dong:
clas dong1要继承class dong
clss dong1 (class dong)
当然类可以多继承,但是要注意圆括号父类的排序,如果父类中有相同的方法名,但是子类使用时没用指定,python从左到右搜索再到父类中是否包含该方法。如下:
calss dong1
class dong2
dong3继承上面的类
class dong3(dong1,dong2):
a=''
def __init__(self ,n,a,w,g):
dong1.__init___(self,n,a,w,g)
dong2.__init__(self,n.t)
test=sample("Tim",25,80,4,"python")
test.speak()
4.方法的重写:
如果你的父方法的功能不可以满足你的需求,那么你可在子类重写你父的方法,如下:
class P arent:
def muMethon(self):
print(" 调用父类方法")
class Child(Parent):
def muMethon(self):
print(" 调用子类的方法')
c=Child()
c.muMethon()
执行以上代码的输出结果为:
调用子类方法
5.运算符重载;
class dong:
def __init__(self,a,b):
self.a=a
self.b=b
def __str__(self):
return' dong(%d,%d)'%(self.a,self.b)
def__add__(self,other):
retur dong(self.a+other.a,self.b+other.b)
v1=dong(2,10)
v2=dong(5,-2)
print(v1+v2)
以上代码的执行结果为dong(7,8)
6. 装饰
装饰
对原有的方法进行美化,更好的实现功能,如下我们以吃火锅为例子:
原材料:
锅底
装饰:
肥牛 品羊肉 蔬菜
import types
def feiniu(n):
print("肥牛:¥58")
if type(n) == types.FunctionType:
return n()+58
return n+58
def shucai(n):
print("蔬菜:$17")
if type(n) == types.FunctionType:
return n()+17
return n+17
@shucai
@feiniu
def mala():
print("麻辣锅底:$12")
return 12
print("共消费:"+str(mala))