Skip to content

面向对象的特征

  1. 封装:提高程序安全性 --将数据的属性和方法包装到类对象中,在方法内部对属性进行操作,在类对象外部调用方法 --python中没有修饰符专门用于属性私有,若属性不希望在类对象外部被访问,可在前面加两个"_"
py
class Student:
 def __init__(self,age):
    self.__age = age  #类的私有属性
 def get_age(self):
     return self.__age

stu = Student(30)
print(stu.get_age())
print(stu._Student__age)  #不建议硬要访问私有属性
  1. 继承:提高代码复用性 --如果一个类没有继承任何类,这默认继承object --python支持多继承 --定义子类时,必须在其构造函数中调用父类的构造函数 --若子类对继承至父类的属性或方法不满意,可在子类中通过super()类调用父类的方法重写
py
'''继承写法'''
class Person(object):
  def __init__(self,name,age):
      self.name = name
      self.age = age
  def info(self):
      print(self.name,self.age)

#定义子类
class Student(Person):
    def __init__(self, name, age, stu_no):
        super().__init__(name,age)
        self.stu_no = stu_no
# 重写父类info()方法
    def info(self):
        super().info()
        print('学号:',self.stu_no)
        
stu = Student('张三',20,'1001')
stu.info()  #调用父类的info()方法

'''多继承'''
class A:
  pass
class B:
  pass
#继承A和B两个父类
class C(A,B):
  pass
  1. 多态:提高程序的可拓展性和可维护性

类的组成

  • 类属性
  • 实例方法
  • 静态方法(使用staticmethod修饰)
  • 类方法(使用classmethod修饰)
  • 初始化方法
py
class Student:
   '''类属性'''
   native_pace = '广西'
   ''''初始化方法'''
   def __init__(self,name,age):
       self.name = name  #self.name是实体属性,进行了赋值操作,将局部变量的name赋值给了实体属性
       self.age = age

   ''''实例方法'''
   def set(self):
       print('实例方法')

   ''''静态方法'''
   @staticmethod
   def method():
       print('这是静态方法')

   ''''类方法'''
   @classmethod
   def cm(cls):
       print('这是类方法')

动态绑定属性和方法

py
class Student:
    def __init__(self,name,age):
        self.name = name 
        self.age = age

def show():
    print('这是一个函数')

stu = Student('张三',20)
stu.gender = '女'  #动态绑定属性
print(stu.name,stu.age,stu.gender)

#动态绑定方法
stu.show = show
stu.show()

私有属性

py
class Student:
    def __init__(self,age):
       self.__age = age  #类的私有属性
    def get_age(self):
        return self.__age

stu = Student(30)
print(stu.get_age())
print(stu._Student__age)  #不建议硬要访问私有属性