面向对象_类_实例_装饰器_继承
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) # 继承长方形的静态方法,由类调用