Python---面向对象学习总结

面向对象:

  • 面向过程程序设计:自上而下,不适合复杂的大型项目。
  • 面向对象程序设计:一切皆对象

类最基础的作用是封装代码:class关键字,类名满足大驼峰

类的组成:属性,方法(第一个参数是self的函数)

对象通过类创建和初始化

对象的初始化:通过__init__方法初始化

对象的生命周期:

  • 一个对象从创建完成后,其生命周期开始
  • 在对象调用了__del__方法后,生命周期结束
  • 在对象的生命周期范围内,可以调用对象的属性和方法
# 面向对象 类
class People:
    # __slot__防止用户恶意添加一些原本不存在的属性
    # __slots__ = ("name", "__age", "skill")

    def __init__(self, name, age, skill):  # __init__相当于java中的new,self相当于this
        self.name = name
        self.__age = age  # 私有属性 python中没有严格的私有属性,不过是障眼法
        self.skill = skill

    def ability(self):
        print("%s love %s" % (self.name, self.skill))

    def get_age(self):  # 通过get访问私有变量
        return self.__age

    def set_age(self, new_age):
        self.__age = new_age


def run(self):
    print("%s run" % (self.name))


maidu = People("maidu", 22, "dance")
print(maidu)  # 输出<__main__.People object at 0x0000000002864C50>
# print(maidu.age)  # 输出22
print(maidu.get_age())  # 输出22
maidu.set_age(19)
# maidu.sex = "male"
print(dir(maidu))  # 查看所有的方法和属性
print(maidu._People__age)  # 输出19
maidu.ability()  # 输出maidu love dance
maidu.run = run
maidu.run(maidu)  # 输出maidu run

封装:

  • 封装是面向对象编程的一大特点
  • 面向对象编程的第一步:将属性和方法的实现细节封装到一个抽象的类内部
  • 外部使用类创建对象,利用对象调用方法和属性
  • 私有属性和方法:属性或方法前加两个下划线

 

继承:

  • 继承实现了代码的复用
  • 继承具有传递性
  • 方法的重写
  • 多继承
  • 新式类:object  【python3的类中默认继承自新式类,python2中需要明确指定 clas ClassName(object):pass】

案例:# 设计时钟日历类,将时钟类和日历类进行联动


# 设计时钟日历类,将时钟类和日历类进行联动


class Clock:  # 时钟类
    def __init__(self, hour, minute, second):
        self.hour = hour
        self.minute = minute
        self.second = second

    def __str__(self):
        return "%02d:%02d:%02d" % (self.hour, self.minute, self.second)

    def tick(self):  # 使秒钟+1
        self.second += 1
        if self.second == 60:
            self.second = 0
            self.minute += 1
        if self.minute == 60:
            self.minute = 0
            self.hour += 1
        if self.hour == 24:
            self.hour = 0
        return "%02d:%02d:%02d" % (self.hour, self.minute, self.second)


clock = Clock(8, 59, 59)
print(clock)  # 输出08:59:59
print(clock.tick())  # 输出09:00:00


class Calendar:  # 日历类
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day

    def __str__(self):
        return "%04d-%02d-%02d" % (self.year, self.month, self.day)

    def next_day(self):  # 使天+1
        self.day += 1
        if self.day == 31:  # 每月暂时按30天处理
            self.day = 1
            self.month += 1
        if self.month == 13:
            self.month = 1
            self.year += 1

        return "%02d-%02d-%02d" % (self.year, self.month, self.day)


c1 = Calendar(2020, 12, 30)
print(c1)  # 输出2020-12-30
print(c1.next_day())  # 输出2021-01-01


# 时钟日期联动


class ClockCalendar(Clock, Calendar):
    def __init__(self, year, month, day, hour, minute, second):
        Clock.__init__(self, hour, minute, second)
        Calendar.__init__(self, year, month, day)

    def __str__(self):
        return Calendar.__str__(self)+" "+Clock.__str__(self)

    def tick(self):
        if self.hour == 0:
            Clock.tick(self)
        elif self.hour == 23:
            Clock.tick(self)
            if self.hour == 0:
                Calendar.next_day(self)


cc = ClockCalendar(2022, 12, 30, 0, 0, 59)
print(cc)  # 输出2022-12-30 00:00:59
cc.tick()
print(cc)  # 输出2022-12-30 00:01:00

 

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值