面向对象
类
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, '岁了')