Python面向对象编程

本文详细介绍了Python中类与对象的基本概念,包括类的定义、属性、方法、继承及多态等内容,并通过具体实例展示了如何使用__slots__、__call__等特殊方法定制类的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from abc import ABCMeta, abstractmethod


class Student(object):
    job = 'study'  # 静态字段

    # 形如__xxx__的都可以用来定制类
    # __slots__限制类的属性
    # __len__()让类作用于len函数
    # __str__返回用户看到的字符串
    # __repr__返回开发者看到的字符串
    # __iter__() 如果一个类想for ... in 循环, 则必须实现一个__iter__方法,该方法返回一个迭代对象
    # __getitem__() 添加[]索引功能
    # __call__()把对象当函数使唤
    # __getattr__(),动态返回一个属性
    # __getitem__(), 如果把对象看成dict,__getitem__()的参数也可能是一个可以作key的object
    # 与之对应的是__setitem__()方法,把对象视作list或dict来对集合赋值
    # __delitem__()方法,用于删除某个元素。

    # 这里的私有变量__idcard在这里需要写成_Student__idcard的格式
    __slots__ = ('name', 'age', 'sex', 'grade', '_Student__idcard', 'id')  # 该类的属性只能是这里面的

    def __call__(self):  # 把对象当函数使唤, 如student1()
        print(self.name)
        print(self.sex)
        print(self.grade)

    @staticmethod
    def sleep():  # 静态方法(没有self, 顶上有@staticmethod)
        print("I am sleeping.")

    def __init__(self, name, id, sex, grade):
        self.name = name  # 类的属性
        self.id = id
        self.sex = sex
        self.grade = grade
        self.__idcard = '3623278424230423794097'  # 类的私有属性, 只有内部可以访问

    def study(self):  # 类的方法
        print("I am studying.")

    def __love(self):  # 类的私有方法, 只有内部可以访问到该方法, 外部无法访问
        print("I am falling love with you.")

    @property
    def teacher(self):  # 把方法当做属性来用(在函数顶上@property), 如 Student1.teacher
        return "王老师"

    def getidcard(self):  # 内部方法访问私有变量
        print(self.__idcard)

    @property
    def idcard(self):  # 内部方法访问私有变量, 并把方法当属性来用, 就可以通过student.idcard来访问__idcard
        return self.__idcard

    @idcard.setter  # 这个idcard.setter的idcard是上一个idcard
    def setidcard(self, newidcard):
        self.__idcard = newidcard

    def love(self):  # 内部方法访问私有方法
        self.__love()

    def __del__(self):
        print("已销毁")


class XueBa(Student):  # 学霸类继承学生类
    __slots__ = ('habit', 'school')  # 子类的slots为自己的加上父类的

    def __init__(self, name, id, sex, grade):
        # Student.__init__(self, name, id, sex, grade)  # 显示继承父类的init方法, 效果等同于下一行
        super(XueBa, self).__init__(name, id, sex, grade)  # 显示继承父类的init方法, 效果等同于上一行

    def study(self):  # 重写study方法
        Student.study(self)  # 先调用父类的study, 然后再次基础上加工
        print("I never stop studying!")


class SuperXueBa(XueBa):  # 超级学霸类继承学霸类
    pass


class GirlXueBa(XueBa):  # 女学霸类继承学霸类
    pass


class SuperGirlXueBa(SuperXueBa, GirlXueBa):  # 超级女学霸类继承超级学霸类和女学霸类, 多重继承
    pass


def main():
    s = Student(1, 2, 3, 4)
    print(s.idcard)
    s.getidcard()
    s.setidcard = 123
    print(s.idcard)
    s()

    x = XueBa(1, 2, 3, 4)
    print(x.grade)
    x.study()

    # 使用元类创建类(type()函数)
    # type(classname, (father1, father2, ...), dict(function1=f1, function2=f2, ...))
    # class的方法名称与函数绑定,这里我们把函数fn绑定到方法名hello上
    def f1(self, name='world'):
        print('hello %s' % name)

    Hello = type('hello', (object,), dict(f=f1))
    a = Hello()
    a.f('what')


class AbstractClass(object):  # 如何写一个接口(抽象类+抽象方法 = 接口)
    __metaclass__ = ABCMeta

    @abstractmethod
    def send(self):
        pass


class B(AbstractClass):
    # AbstractClass是一个抽象类, send是一个抽象方法, 所以继承这个类的话必须定义抽象方法send, 不然会报错
    def send(self):
        print('send')


if __name__ == '__main__':
    main()
内容概要:本文深入探讨了Kotlin语言在函数式编程和跨平台开发方面的特性和优势,结合详细的代码案例,展示了Kotlin的核心技巧和应用场景。文章首先介绍了高阶函数和Lambda表达式的使用,解释了它们如何简化集合操作和回调函数处理。接着,详细讲解了Kotlin Multiplatform(KMP)的实现方式,包括共享模块的创建和平台特定模块的配置,展示了如何通过共享业务逻辑代码提高开发效率。最后,文章总结了Kotlin在Android开发、跨平台移动开发、后端开发和Web开发中的应用场景,展望了其未来发展趋势,指出Kotlin将继续在函数式编程和跨平台开发领域不断完善和发展。; 适合人群:对函数式编程和跨平台开发感兴趣的开发者,尤其是有一定编程基础的Kotlin初学者和中级开发者。; 使用场景及目标:①理解Kotlin中高阶函数和Lambda表达式的使用方法及其在实际开发中的应用场景;②掌握Kotlin Multiplatform的实现方式,能够在多个平台上共享业务逻辑代码,提高开发效率;③了解Kotlin在不同开发领域的应用场景,为选择合适的技术栈提供参考。; 其他说明:本文不仅提供了理论知识,还结合了大量代码案例,帮助读者更好地理解和实践Kotlin的函数式编程特性和跨平台开发能力。建议读者在学习过程中动手实践代码案例,以加深理解和掌握。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值