千家信息网

Python3的面向对象举例分析

发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,这篇文章主要介绍"Python3的面向对象举例分析",在日常操作中,相信很多人在Python3的面向对象举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Pytho
千家信息网最后更新 2024年11月17日Python3的面向对象举例分析

这篇文章主要介绍"Python3的面向对象举例分析",在日常操作中,相信很多人在Python3的面向对象举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Python3的面向对象举例分析"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

# 面向对象import abcfrom enum import Enum, unique@unique  # unique确保无重复值class Weekday(Enum):    """    枚举类    """    # 左边为name,右边为value    Sun = 0    Mon = 1    Tue = 2    Wed = 3    Thu = 4    Fri = 5    Sat = 6class Person(metaclass=abc.ABCMeta):    """    Person 为抽象类,Person的子类需要实现抽象方法    """    @abc.abstractmethod    def abs_m(self):        print("Person:abs_m")class Student(Person):    """    Student Doc    """    # 实现抽象方法    def abs_m(self):        print("absMethod")    # 使用父类引用    def sup(self):        super().abs_m()    # count为类属性    count = 0    # 类方法    @classmethod    def cm(cls):        print("classMethod:", Student.count)    # 静态方法    @staticmethod    def sm():        print("staticMethod:", Student.count)    # 实例私有方法    def __p(self):        # 如果没有使用到self,这里可能会警告this method may be static        print("私有方法", self)    # 定义该类只允许有这些属性    __slots__ = ('name', '__age', "_gender")    def __init__(self, name, age, gender):        # 这是实例属性,外部可以直接访问        self.name = name        # 两个下划线开头是私有属性,在外部不能访问(如果要强行访问,可以使用s._Student__name,但不建议这样做)        self.__age = age        # 一个下划线开头也表示私有属性,在外部可以直接访问,但不建议访问(为什么这样设计?)        self._gender = gender        pass    # 双下划线开头和结尾的是特殊方法或变量,不是私有的,外部可以访问    # 因此不要把方法或属性名定义为双下划线开头和结尾    def __str__(self):        return f"{self.name}, {self.__age}, {self._gender}"if __name__ == '__main__':    print(Student("jack", 12, "male").cm())    print(Student("jack", 12, "male").sm())    s = Student("jack", 12, "male")    # s的具体类型    print(type(s).__name__)    # 内置attr函数使用    print(hasattr(s, "name"))    print(getattr(s, "name"))    # print(delattr(s, "name"))    # print(setattr(s, "abc", 1))    # s是否是某个类型    print(isinstance(s, Student))    # Student类是否是某个类的子类    print(issubclass(Student, object))    # 调用s.__str__()方法    print(s)    # 使用枚举类    day = Weekday.Monprint(day.name)    print(day.value)
class A(object):    bar = 1def func1(self):print('foo')    @classmethoddef func2(cls):print('func2')print(cls.bar)        cls().func1()  # 调用 foo 方法A.func2()  # 不需要实例化
class C(object):    @staticmethoddef f():print('runoob'); C.f();          # 静态方法无需实例化cobj = C()cobj.f()        # 也可以实例化后调用

到此,关于"Python3的面向对象举例分析"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0