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

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

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
# 输出:
# 
# 

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)  # 继承长方形的静态方法,由类调用

你可能感兴趣的:(Python基础,python,类,多态,object,面向对象编程)