Python学习第四章

时间:2022-11-18 08:13:53

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))