面向对象的特征
- 封装:提高程序安全性 --将数据的属性和方法包装到类对象中,在方法内部对属性进行操作,在类对象外部调用方法 --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) #不建议硬要访问私有属性
- 继承:提高代码复用性 --如果一个类没有继承任何类,这默认继承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
- 多态:提高程序的可拓展性和可维护性
类的组成
- 类属性
- 实例方法
- 静态方法(使用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) #不建议硬要访问私有属性