python编程练习(小甲鱼)第36-40课(super()函数用法)

1.:抽象的,包括属性和方法,比如矩形类,属性可以是长宽,方法(也就是函数)可以是计算面积周长。
2.按照以下提示尝试定义一个Person类并生成实例对象。

属性:姓名(默认姓名为“小甲鱼”)
方法:打印姓名
提示:方法中对属性的引用形式需加上self,如self.name

class Person:
    name = '小甲鱼'#属性

    def printt(self):#方法
        print(self.name)#方法中对属性的引用
a = Person()
a.printt()

3.按照以下提示尝试定义一个矩形类并生成类实例对象。

属性:长和宽
方法:设置长和宽 -> setRect(self),获得长和宽 -> getRect(self),获得面积 -> getArea(self)
提示:方法中对属性的引用形式需加上self,如self.width

class juxing:
    chang = 4
    kuan = 2
    def setRect(self):
        self.chang = int(input('请输入长:'))
        self.kuan = int(input('请输入宽:'))
    def getRect(self):
        print('矩形的长为:%d,宽为:%d'%(self.chang,self.kuan))
    def getArea(self):
        s = self.chang * self.kuan
        print('矩形的面积为:',s)
m = juxing()
m.setRect()
m.getArea()
m.getRect()

4.self参数的作用:self指向的是类的实例化对象,使得程序能够判断是哪个对象在调用方法。
5.不希望对象的属性和方法被外部直接引用时,可以在名字前加入双下划线,例如:__name。
6.__init __方法会在类实例化时被自动调用,相当于对对象的初始化,是一种魔法方法,可重写,不应该返回除了none以外的任何对象。
7.明确类对象,类的实例化对象

在建立类时就生成了一个类对象,此对象可以调用类的属性,不可以直接调用类的方法,实例化对象才可以调用方法。

8.按照以下要求定义一个游乐园门票的类,并尝试计算2个成人+1个小孩平日票价。

平日票价100元
周末票价为平日的120%
儿童半票

class Ticket:
    def __init__(self, weekend=False, child=False):#初始化设置
        self.price = 100
        self.increase = 1
        self.discount = 1
        if weekend:
            self.increase = 1.2
        if child:
            self.discount = 0.5

    def Price(self, num):
        return self.price * self.increase * self.discount * num

adult = Ticket()
child = Ticket(child=True)
print("2个大人 + 1个小孩平日票价为:%.2f元" % (adult.Price(2) + child.Price(1)))

9.super()函数

在类的继承中,如果重新定义了某个方法,则这个方法将会覆盖父类的同名方法,当想同时实现子类和父类的这一方法时,可以使用两种方法,一个是:直接调用未绑定的父类方法;一个是:使用super()函数。

调用未绑定的父类方法,但是在多重继承中会出现问题。

class B:
    def ss(self):
       pass
class A(B):
    def ss(self):
        B.ss(self)  #调用父类方法
        pass

使用super()函数,常用于多重继承。

class B:
    def ss(self):
       pass
class A(B):
    def ss(self):
        super(A,self).ss()  #先找到类A的父类B,然后将类A的对象转化为类B的对象,最后调用ss方法。
        #也可以直接super().ss()#python3写法
        pass

一般,super()函数最常见的方法就是在子类中调用父类的初始化方法

class B:
    def __init__(self, a, b):
        self.a = a
        self.b = b
class A(B):
    def __init__(self, a, b, c):
        super().__init__(a, b)
        self.c = c

10.多态,一个事物的多种状态,在python中让具有不同功能的函数使用相同的函数名,从而可以用一个函数名调用不同功能的函数。
11.定义一个点(Point)类和直线(Line)类,使用getLen方法可以获得直线的长度。

提示:
1.设点A(X1,Y1)、B(X2,Y2)
2.Python中计算开根号可使用math模块中的sqrt函数
3.直线需有两点构成,因此初始化时需要有两个点(Point)对象作为参数

import math as m
class point():
    def __init__(self, x, y):#设置x,y
        self.x = x
        self.y = y
    def getx(self):#获得x,y
        return self.x
    def gety(self):
        return self.y
class line():
    def __init__(self,p1,p2):
        self.x = p1.getx()-p2.getx()
        self.y = p1.gety()-p2.gety()
    def getLen(self):
        self.len = m.sqrt(self.x**2+ self.y**2)
        print('%.2f'%self.len)
p1 = point(3, 1)
p2 = point(1, 4)
line = line(p1, p2)
line.getLen()

11.组合:在类定义中直接把需要的类放进去实例化。

class Turtle:
    pass
class Fish:
    pass
class Pool:
    def __init__(self, x, y):
        self.turtle = Turtle(x)  # 直接把需要的类放进去实例化
        self.fish = Fish(y)

12.请动手在一个类中定义一个变量,用于跟踪类有多少个实例被创建(当实例化一个对象,这个变量+1,当销毁一个对象,这个变量自动-1)。
类属性通常用来跟踪与类相关的值。

class C:
    count = 0#类属性
    def __init__(self):#自动调用进行初始化
        C.count += 1
    def __del__(self):
        C.count -= 1
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值