面向过程-面向对象
类和对象
类是多个类似事物组成的统称,能够帮助我们快速理解和判断事物的性质
数据类型:
- 对象
创建类的语法
class Student:
pass
类的组成:
- 类的属性
- 实例方法
- 静态方法
- 类方法
例子:
class Student:
native_place='吉林'
def __init__(self,name,age):
self.name=name
self.age=age
#实例方法
def ect(self):
print('学生在吃饭...')
#静态方法
@staticmethod
def method():
print('static修饰的静态方法')
#类方法
@classmethod
def cm(cls):
print('class修饰的方法为类方法')
对象的创建和使用
- 对象的创建又称为类的实例化
- 语法:
- 实例名=类名()
- 类属性:类中方法外的变量称为类属性,别该类的所有对象所共享
- 类方法:使用@classmethod修饰的方法,使用类名直接访问的方法
- 静态方法:使用@staticmethod修饰的主法,使用类名直接方法问的方法
例子:
class Student:
native_place='吉林'
def __init__(self,name,age):
self.name=name
self.age=age
#实例方法
def ect(self):
print('学生在吃饭...')
#静态方法
@staticmethod
def method():
print('static修饰的静态方法')
#类方法
@classmethod
def cm(cls):
print('class修饰的方法为类方法')
if __name__ == '__main__':
# 创建student的对象
stu = Student('Jack', 20)
print(stu.name) # 实例属性
print(stu.age) # 实例属性
stu.cm() # 实例方法
Student.method()
Jack
20
class修饰的方法为类方法
static修饰的静态方法
动态的绑定属性和方法
python是动态语言,在创建对象之后,可以动态地绑定属性和方法
def show():
print('我是一个函数')
stu=Student('Jack',20)
stu.gender='男'#动态绑定属性
print(stu.name,stu.age,stu.gender)
stu.show=show#动态绑定方法
stu.show()
面向对象的三大特征
- 封装:提高程序的安全性
- 将数据(属性)和行为(方法)包装到类对象中。在方法内部对属性进行操作,在类对象的外部调用方法。这样,无需关系内部的具体实现细节,从而隔离了复杂度。
- 在Python中没有专门的修饰符用于属性私有,如果属性不希望在类对象外部被访问,前边使用两个"_"。
- 继承:提高代码的复用性
- 多态:提高程序的可扩展性和可维护性
例子:
封装:
class Student:
native_place='吉林'
def __init__(self,name,age):
self.name=name
self.__age=age
#实例方法
def ect(self):
print('学生在吃饭...')
#静态方法
@staticmethod
def method():
print('static修饰的静态方法')
#类方法
@classmethod
def cm(cls):
print('class修饰的方法为类方法')
if __name__ == '__main__':
# 创建student的对象
stu = Student('Jack', 20)
print(stu.name) # 实例属性
print(stu.age) # 私有属性无法直接访问
继承:
语法格式:
class 子类名字(父类1,父类2.....):
pass
- 如果一个类默认没有继承任何类,则默认继承object类
- Python支持多继承
- 定义子类时,必需在其构造函数中调用父类的构造函数
#父类
class Person:
def __init__(self,name,age):
self.name=name
self.age=age
def info(self):
print('姓名:{0},年龄{1}'.format(self.name, self.age))
#子类
class Student(Person):
def __init__(self,name,age,socre):
super().__init__(name,age)
self.sorce=socre
if __name__ == '__main__':
stu = Student('Jack',18,'100')
stu.info()
姓名:Jack,年龄18
方法重写
例子:
#父类
class Person:
def __init__(self,name,age):
self.name=name
self.age=age
def info(self):
print('姓名:{0},年龄{1}'.format(self.name, self.age))
#子类
class Student(Person):
def __init__(self,name,age,socre):
super().__init__(name,age)
self.sorce=socre
def info(self):
super().info()
print('分数{0}'.format(self.sorce))
if __name__ == '__main__':
stu = Student('Jack',18,'100')
stu.info()
object
-
object类是所有父类,因此所有的类都有object类的属性和方法。
-
内置函数dir()可以查看指定对象所有属性
-
Object有一个
-
__str__()方法用于返回一个对于'对象的描述',对应于内置函数str()经常用于print()方法,帮助我们查看对象的信息,所以我们经常会对str()方法重写 -
上面的str()方法类似toString()方法
多态
多态就是具有多种形态,即时不知道一个变量所引用的具体的对象到底是什么类型,仍然可以通过这个变量调用方法,在运行过程中根据变量调用方法,在运行过程中根据百年来所引用对象的类型,动态的调用哪个对象中的方法
例子:
class Animal:
def eat(self):
print('动物吃')
class Person(Animal):
def eat(self):
print('人吃五谷杂粮')
class Cat(Animal):
def eat(self):
print('猫吃鱼')
def show(obj):
obj.eat()
if __name__ == '__main__':
show(Animal())
show(Person())
show(Cat())
浙公网安备 33010602011771号