面向对象

class Student():
  sum = 0 # 类变量

  # 构造函数
  def __init__(self, id='', name='', age=0):
    self.id = id
    self.name = name
    self.age = age
    Student.sum += 1 # 访问类变量

  # 行为需要传入 self 来访问数据成员 ,self 可以任意命名,相当于实例本身
  def get_name(self):
    return self.name
  
  def set_name(self, name):
    self.name = name

# 实例化
student1 = Student(1, '张三', 18)
print('name: ', student1.get_name()) # name:  张三
student1.set_name('李四')
print('name: ', student1.get_name()) # name:  李四

类变量和实例变量

# 实例化
student1 = Student(1, '张三', 18)
# 打印实例变量字典
print(student1.__dict__)
# 访问实例变量
student1.name
# ***实例变量不存在时,会从类变量中查找。类变量中的值相当于默认值***
# 访问类变量字典
print(Student.__dict__)
# 访问类变量
Student.sum
# or
student1.__class__.sum

类方法

class Student():
  id = ''
  sum = 0 # 类变量

  @classmethod
  def plus_sum(cls, val):
    cls.sum += val

可以通过实例直接调用类方法 student1.plus_sum()

静态方法

class Student():
  id = ''
  name = 'qiyue'

  @staticmethod
  def add(x, y):
    print(Student.name) # 静态方法中可以访问类变量,不能访问实例变量
    return x + y

student1 = Student()
print(student1.add(1, 2))
print(Student.add(1, 2))

成员访问控制

通过给变量或方法前面加 __ 来变成私有的,不能通过实例访问

class Student():
  id = ''
  __name = 'qiyue'

  def __set_name(self, val):
    self.__name = val

继承

class Person():
  
  def __init__(self, age = 0):
    self.age = age

class Student(Person):

  def __init__(self, name = '', age = 0):
    super(Student, self).__init__(age)
    self.name = name

student1 = Student('Bob', 18)

print(student1.name , '同学', student1.age, '岁了')