2020-10-09 Python基础学习第八天笔记

这篇博客主要介绍了Python中的方法,包括私有方法和公共方法的区分,@property装饰器的应用,以及继承和多态的概念。私有方法以两个下划线开头,外部无法直接访问,而@property允许方法像属性一样调用。在继承中,Python支持多重继承,但应避免过多使用。多态体现在相同方法调用不同对象时产生不同行为,需要有继承和方法重写作为基础。
摘要由CSDN通过智能技术生成

一、方法

如果我们在类体中定义了多个重名的方法,只有最后一个方法有效。

1、私有方法和公共方法:
  1. 通常两个下划线开头的属性是私有的(private)。其他为公共的(public)。
  2. 类内部可以直接访问私有属性或方法
  3. 类外部不能直接访问私有属性或方法
  4. 类外部可以通过“_类名__私有属性或方法名”访问私有属性或方法
2、@property装饰器

@property 可以将一个方法的调用方式变成“属性调用”,但是不能赋值。

class Employee:

    def __init__(self,name,salary):
        self.__name = name
        self.__salary = salary

    @property
    def salary(self):
        return self.__salary

    @salary.setter
    def salary(self,salary):
         if 1000 < salary < 50000:
            self.__salary = salary
         else:
            print("录入错误,薪水在1000-50000这个范围!")

作业:

@desc:设计一个名为MyRectangle 的矩形类来表示矩形。这个类包含:
(1) 左上角顶点的坐标:x,y (2) 宽度和高度:width、height
(3) 构造方法:传入x,y,width,height。如果(x,y)不传则默认是 0,如果width 和height 不传,则默认是 100.
(4) 定义一个 getArea() 计算面积的方法 (5) 定义一个 getPerimeter(),计算周长的方法
(6) 定义一个 draw()方法,使用海龟绘图绘制出这个矩形
'''

import turtle

class Rectangle:

    def __init__(self,x=0,y=0,height=100,width=100):
        self.x = x
        self.y = y
        self.height = height
        self.width = width

    def getArea(self):
        print("长方形的面积是:",self.height * self.width)

    def getPerimeter(self):
        print("长方形的周长是:",(self.height + self.width)*2)

    def draw(self):
        t = turtle.Pen()
        t.penup()
        t.goto(self.x,self.y)
        t.pendown()
        t.forward(self.width)
        t.right(90)
        t.forward(self.height)
        t.right(90)
        t.forward(self.width)
        t.right(90)
        t.forward(self.height)

r = Rectangle(20,0,200,100)
r.getArea()
r.getPerimeter()
r.draw()
3、继承

Python支持多重继承,一个子类可以继承多个父类。

class Person:

    def __init__(self,name,age):
        self.name = name
        self.age = age

    def say_age(self):
        print("我不知道!")


class Student(Person):

    def __init__(self,name,age,score):
        Person.__init__(self,name,age)#必须显式调用,不然不会被调用
        self.score = score

Tips:
1.子类构造函数必须显式调用父类,不然不会被调用
2.父类的私有属性,不能直接访问

类方法 mro()或者类属性__mro__可以输出这个类的继承层次结构,dir()可以查看对象属性,对应于内置函数 str() 用于类似print的方法。super()获得父类定义。
Python支持多重继承,一个子类可以有多个“直接父类”,但应尽量避免使用。

4.多态((polymorphism)

多态是同一个方法调用不同的对象,因此产生不同的行为
Tips:

  1. 方法才有多态,属性没有多态。
  2. 必须有继承+方法重写才能构成多态。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值