python基础语法3--面向对象

目录

一、引入

二、面向对象的两个概念

1.类

2.对象

三、面向对象三大特性

1.封装性

1)定义类

2)创建对象

3)添加和获取对象的属性

4)特殊功能的函数

i)_init_()   初始化对象

ii)_str_()   显示信息

​编辑

iii)_del_()   删除对象

 2.继承性

基本语法:

与继承相关的概念

1.单继承

2.多继承

3.继承方法

1)重写:

2)强制调用父类的方法:super()

3)MRO(Method Resolution Order)方法:方法解析顺序

3.多态性

四、面向对象其他特性

1.类属性

2.类方法

3.静态方法


一、引入

当前软件主流开发有两种,一种是面向对象,一种是面向过程

以洗衣服为例

面向过程:脱衣服--找盆--加水--加洗衣粉--浸泡30分钟--搓洗--拧干--倒水--加水--漂洗--拧衣服--倒水--晾衣服

面向对象:脱衣服--放入洗衣机--按开关--拿出来晾晒

二、面向对象的两个概念

1.类

类=类名+属性+方法

类别   =  类名  +                属性                 +         方法

-------------------------------------------------------------------------------

人类   =    人    +     身高、年龄                 +    跑、睡觉

狗类   =    狗    +     品种、毛色、性别      +     叫、跑、摇尾巴

2.对象

三、面向对象三大特性

1.封装性

1)定义类

class 类名:

    方法列表

# 经典类
class Hero:
class Hero():

# 新式类
class Hero(object):
    def info(self):
        print('object是python里的顶级父类')

2)创建对象

对象名1 = 类名()

对象名2 = 类名()

······

3)添加和获取对象的属性

对象属性即可以在类外添加获取,也可以在类里添加和获取

4)特殊功能的函数

i)_init_()   初始化对象
# 可以直接定义, 但是后续不方便修改,使用不灵活
def _init_(self):
    self.name='xxx'   # 姓名
    self.hp = 2600    # 生命值
    self.atk = 450    # 攻击力
    self.armor = 200  # 护甲值

# 所以我们使用有参数的_init_方法
def _init_(self, name, skill, hp, atk, armor):
    self.name=name    # 姓名
    self.hp = hp      # 生命值
    self.atk = atk    # 攻击力
    self.armor=armor  # 护甲值

#这样后续可以直接在调运对象的时候修改参数
ii)_str_()   显示信息

iii)_del_()   删除对象

 2.继承性

指多个类之间的所属关系

基本语法:

# 父类B
class B(object):
    pass

# 子类A
class A(B):
    pass
  •  object-------->class B(object)-------->class A(B)    自动继承B中的公共属性和方法,私有不算
  • 在python中,所有类默认继承object类,object是顶级类或基类,其他子类都叫派生类。

与继承相关的概念

1.单继承

多层继承中的单继承 

class C(object):
    def func(self):
        print('C类中的func方法')

class B(C):
    pass

class A(B):
    # A-->B-->C   可以得出结论A--> C
    pass

a = A()
a.func

私有属性封装:

 

私有方法封装:

在函数前加上__--两个下划线

class ATM():
    def __card(self):
        print('插卡')

2.多继承

3.继承方法

1)重写:

在原有父类的基础之上子类进行扩展

类的调用顺序:现在现有类中进行方法调用,如果该类中没有,就使用上一级的方法。

2)强制调用父类的方法:super()

3)MRO(Method Resolution Order)方法:方法解析顺序
print(ElectricCar._ _mro_ _)

print(ElectricCar.mro())

3.多态性

子类重写父类方法,调用不同子类对象的相同父类,产生不同的执行效果

条件:多态依赖继承(非必须);子类必须重写父类方法

过程:首先定义一个父类,可能拥有多个子类对象,当调用一个公共方法(接口)时,传递的对象不同,返回的结果不同。

 

好处:后期无需扩展方法,只需扩展类别即可

四、面向对象其他特性

1.类属性

把类看作一个对象,考虑该类被调用了多少次

# 一、实例属性(对象属性)
class Person():
    def __init__(self,name,age):
        self.name = name
        self.age = age      # self.name和self.age中的name和age就是实例属性

#  实例化对象
p1 = Person('Tom',23)
print(p1.name)
print(p1.age)


# 二、类属性----用于统计该类被统计多少次
class Person(object):
    count = 0  # 定义类属性
    def __init__(self,name,age):
        self.name = name
        self.age = age      

    Person.count += 1    # 类名.属性,相当于调用类属性
        
#  实例化对象
p1 = Person('Tom',23)
p2 = Person('Lily',21)

# 访问Person类中的count属性
print(f'Person类中一共实例化了{Person.count}次')

2.类方法

类理解为是一个特殊对象,有类属性和类方法

在类方法中可以直接访问类属性或者调用其他类方法

类方法基本语法:

@classmethod

def 类方法名称(cls):             # cls 代表类本身

    pass

与对象方法相比:

对象方基本语法:

def 函数名称(self):             # self 代表实例化对象本身
    pass

通过"cls."访问类的属性;也可以通过 "cls."调用其他方法

'''
创建一个工具类,每个工具都有自己的名称
再类封装一个"show_tool_count"的类方法
输出当前类,记录个数
'''
class Tool(object):
    count= 0                # 统计Tool类创建对象的个数(类属性)

    def __init__(self, name):
        self.name = name
        Tool.count += 1      #每实例化一次Tool类,则对其进行+1操作

    @classmethod             # 定义一个类方法,专门用于操作类属性
    def show_tool_count(cls):
        print(f'当前{cls}类一共被实例化{cls.count}次')


t1 = Tool('斧头')
t2 = Tool('榔头')

Tool.show_tool_count()  # 调用show_tool_count()类方法

3.静态方法

 在开发时,如果在类中封装一个方法,但是:

1)既不需要访问实例属性或调用实例方法

2)也不需要访问类属性或调用类方法

class Game(object):
    @staticmethod      # 静态方法

    def menu():
        print('1.开始')
        print('2.结束')

Game.menu()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值