5.Python学习:面向对象

1.面向对象和面向过程的区别

以下五子棋为例:
在这里插入图片描述

2.类和实例

(1)类是抽象的模板,实例是根据模板创建出来的具体的对象
(2)比如人类就是一个类,刘亦菲就是人类的一个实例

2.1 新建类和类的实例化

class 类名:
	def 方法名():
		代码

初始化方法不负责创建对象,而是给对象赋予初始值。创建对象是构造方法做的
在这里插入图片描述
普通的类方法都有self,所有带有self的属性或方法,代表可以共用。也就是实例本身
在这里插入图片描述

在这里插入图片描述

class Rectangle:
    def __init__(self,length,width):
        self.length=length#将用户传的length作为长方形自身的length
        self.width=width#将用户传的width作为长方形自身的width
    def perimeter(self):
        return (self.length+self.width)*2
    def area(self):
        return self.length*self.width

rec=Rectangle(6,4)#实例化为一个长为6宽为4的长方形
print(rec.perimeter())
print(rec.area())

在这里插入图片描述

2.2 实例方法、静态方法和类方法

2.2.1实例方法

类里面的方法是实例方法,不能由类调用,需要先实例化对象,之后由实例对象调用

class Rectangle:
    def __init__(self,length,width):
        self.length=length#将用户传的length作为长方形自身的length
        self.width=width#将用户传的width作为长方形自身的width
    def perimeter(self):
        return (self.length+self.width)*2
    def area(self):
        return self.length*self.width
rec.perimeter()#实例调用方法
Rectangle.perimeter()//这样会报错

2.2.2 类方法

有时需要使用可以由类调用的方法,可以使用@classmethod装饰器,声明某个方法是类方法
类方法:类和实例都可以调用,类方法可以调用类属性,不能调用self的属性
类属性:定义在类里,不能定义在__init__里,否则类不能调用,只能实例调用。
装饰器:待补充

class Rectangle:
	color='red'# 类的属性
    def __init__(self,length,width):
        self.length=length#将用户传的length作为长方形自身的length
        self.width=width#将用户传的width作为长方形自身的width
    def perimeter(self):
        return (self.length+self.width)*2
    @classmethod
    def features(cls):
        print("两边长相等,两边宽相等,长和宽的角度是90度")
        print('颜色是',cls.color)#不能调用self.width
rec=Rectangle(6,4)#实例化为一个长为6宽为4的长方形
Rectangle.features()//类调用
rec.features()//实例调用

在这里插入图片描述

2.2.3 静态方法

静态方法可以由类调用
在这里插入图片描述

class Rectangle:
    color='red'# 类的属性
    def __init__(self,length,width):
        self.length=length#将用户传的length作为长方形自身的length
        self.width=width#将用户传的width作为长方形自身的width
    def perimeter(self):
        return (self.length+self.width)*2
    def area(self):
        return self.length*self.width
    @classmethod
    def features(cls):
        print("两边长相等,两边宽相等,长和宽的角度是90度")
        print('颜色是',cls.color)
    @staticmethod
    def sumdata(a,b):
        return a+b
print(Rectangle.sumdata(1,2))

在这里插入图片描述

3.类的继承

继承是从已有的类中派生出新的类,新的类可以使用已有类的属性和行为,并扩展新的能力
比如小学生是学生的子类,有学生的共有特征,也有小学生的自有特征

3.1完全继承

子类不做任何改变,完全继承父类的所有属性和方法

class Rectangle:
    color='red'# 类的属性
    def __init__(self,length,width):
        self.length=length#将用户传的length作为长方形自身的length
        self.width=width#将用户传的width作为长方形自身的width
    def perimeter(self):
        return (self.length+self.width)*2
    def area(self):
        return self.length*self.width
    @classmethod
    def features(cls):
        print("两边长相等,两边宽相等,长和宽的角度是90度")
        print('颜色是',cls.color)
    @staticmethod
    def sumdata(a,b):
        return a+b

#完全继承
class Square(Rectangle):
    pass
square=Square(6,6)
print(square.area())

在这里插入图片描述

3.2 部分继承

在这里插入图片描述

class Rectangle:
    color='red'# 类的属性
    def __init__(self,length,width):
        self.length=length#将用户传的length作为长方形自身的length
        self.width=width#将用户传的width作为长方形自身的width
    def perimeter(self):
        return (self.length+self.width)*2
    def area(self):
        return self.length*self.width
    @classmethod
    def features(cls):
        print("两边长相等,两边宽相等,长和宽的角度是90度")
        print('颜色是',cls.color)
    @staticmethod
    def sumdata(a,b):
        return a+b
//部分继承,重写部分父类方法
class Squre1(Rectangle):
    def __init__(self,side):
        self.length=side
        self.width=side
square=Squre1(6)
print(square.area())

在这里插入图片描述

3.3 继承并追加super()

在这里插入图片描述

class Rectangle:
    color='red'# 类的属性
    def __init__(self,length,width):
        self.length=length#将用户传的length作为长方形自身的length
        self.width=width#将用户传的width作为长方形自身的width
    def perimeter(self):
        return (self.length+self.width)*2
    def area(self):
        return self.length*self.width
    @classmethod
    def features(cls):
        print("两边长相等,两边宽相等,长和宽的角度是90度")
        print('颜色是',cls.color)
#继承并追加
class Square2(Rectangle):
    def __init__(self,side):
        self.length=side
        self.width=side
    @classmethod
    def features(cls):
        super().features()//先继承父类的features方法
        print("长和宽相等")//再新增自己的东西
square=Square2(6)
square.features()

在这里插入图片描述

3.4Object

所有类都是object的子类,无论是否声明继承,实际都继承了object
s

class Class1(object):
	pass
两种写法是效果一样的
class Class:
	pass
print(Class1.__dict__)
print(Class1.__doc__)
print(Class1.__name__)
	

3.5多继承

  • 一个父类可以有多个父类
  • 父类中有同名方法时,按继承顺序调用先继承的
    水路两通汽车:既有水性又可以路上跑
#多继承
class Money1:
    def money1(self):
        print('一个亿')
class Money2:
    def money2(self):
        print('两个亿')
class Human(Money1,Money2):
    pass
man=Human()
man.money1()
man.money2()

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值