这篇文章主要介绍“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的面向对象举例分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!