Python面向对象_类_实例_装饰器_继承

本文探讨了如何使用Python创建`Recatangle`类来表示长方形,介绍了实例方法、类方法和静态方法的区别,以及装饰器在定义方法类型的运用。通过继承展示了正方形类的实现,包括完全继承和部分覆盖父类方法。重点讲解了如何利用`type`和`inspect`模块检查方法类型,以及在继承中的拓展和覆盖行为。
摘要由CSDN通过智能技术生成

面向对象_类_实例_装饰器_继承

class Recatangle:   # 新建一个长方形的类
    def __init__(self, length, width):
        self.length = length
        self.width = width

    # 只能由实例调用,称为实例方法
    def permeter(self):
        return (self.length + self.width)*2

    # 只能由实例调用,称为实例方法
    def area(self):
        return self.length * self.width

    # 装饰器,表示下面的方法是类方法
    @classmethod
    def features(cls):
        print('两边的长相等,两边的宽也相等,长和宽的角度为90°')

    # 装饰器,表示下面的方法是静态方法
    # 静态方法本质上是函数,只是写在了类里面
    @staticmethod
    def sumdata(a, b):
        return a + b

1、类/静态方法既可以由实例调用,也可以由类调用

rec = Recatangle(6, 4)   # 实例化一个长方形
rec.permeter()           # 调用周长计算公式方法
rec.area()               # 调用面积计算公式方法
rec.features()           # 调用类方法,由实例调用
Recatangle.features()    # 调用类方法,由类调用
rec.sumdata(10, 10)           # 调用静态方法,由实例调用
Recatangle.sumdata(10, 10)    # 调用静态方法,由类调用

2、可以用type的方式查看是方法还是函数

# print(type(rec.features))   # 类方法是method
# print(type(rec.sumdata))    # 静态方法是function
# 输出:
# <class 'method'>
# <class 'function'>

2、inspect模块

# python的自检模块,可以判断某个对象是否是某种类型,返回值是布尔型
import inspect

print(inspect.ismethod(rec.features))  # 判断某个对象是否是method
print(inspect.isfunction(rec.sumdata)) # 判断某个对象是否是function
print(inspect.isclass(Recatangle))     # 判断某个对象是否是class
# 输出:
# True
# True
# True

3、继承-完全继承

class Square(Recatangle):  # 定义正方形类
    pass

squ = Square(6, 6)   # 实例化一个正方形
squ.permeter()       # 继承长方形的周长计算公式方法
squ.area()           # 继承长方形的面积计算公式方法
squ.features()       # 继承长方形的类方法,由实例调用
Square.features()    # 继承长方形的类方法,由类调用
squ.sumdata(10, 10)  # 继承长方形的静态方法,由实例调用
Square.sumdata(10, 10)  # 继承长方形的静态方法,由类调用

4、继承-部分继承,改写一些方法

class Square(Recatangle):
    def __init__(self, side):  # 当子类的某个方法与父类的同名时,则会覆盖父类的方法
        self.length = side
        self.width = side

squ = Square(6)      # 实例化一个正方形
squ.permeter()       # 继承长方形的周长计算公式方法
squ.area()           # 继承长方形的面积计算公式方法
squ.features()       # 继承长方形的类方法,由实例调用
Square.features()    # 继承长方形的类方法,由类调用
squ.sumdata(10, 10)  # 继承长方形的静态方法,由实例调用
Square.sumdata(10, 10)  # 继承长方形的静态方法,由类调用

5、继承-对父类的方法进行拓展,既有父类的东西,也有自己的东西

class Square(Recatangle):
    def __init__(self, side):  # 当子类的某个方法与父类的同名时,则会覆盖父类的方法
        self.length = side
        self.width = side
    @classmethod
    def features(cls):
        super().features()       # 声明继承父类的同名方法的代码
        # Recatangle.features()  # 这种写法也可以
        print('长和宽也相等')

squ = Square(6)         # 实例化一个正方形
squ.permeter()          # 继承长方形的周长计算公式方法
squ.area()              # 继承长方形的面积计算公式方法
squ.features()          # 继承长方形的类方法,由实例调用
Square.features()       # 继承长方形的类方法,由类调用
squ.sumdata(10, 10)     # 继承长方形的静态方法,由实例调用
Square.sumdata(10, 10)  # 继承长方形的静态方法,由类调用
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢同学.

但行好事 莫问前程

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值