面向过程-面向对象

类和对象

类是多个类似事物组成的统称,能够帮助我们快速理解和判断事物的性质

数据类型:

  • 对象

创建类的语法

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())

posted on 2022-07-04 07:41  Steam残酷  阅读(41)  评论(0)    收藏  举报