python之面向对象编程

类与对象的概念

1.类:即类别、种类,具有相同特征的一类事物

2.对象:对象是类的具体表现形式,是实际存在的个体。

比如:"人类"就是一个类,而"人"就是一个对象。

PS:类只能描述出公共的特征!不同的特征应该由对象自己描述!比如"人"这个对象是有高有矮的,有胖有瘦的等等...

类与对象的创建

因为对象是类的具体表现形式,所以在代码编程中是先有类才能有对象。在python中"class"关键字就是用来定义类的。

创建类的语法结构:

class 类名:
    类体代码
"""
1.类名类似于函数名 但是首字母推荐大写 用于区分
2.类体代码就是存放对象公共数据和功能的地方
"""

定义一个学生的类

class Student:
    # 学生类公共的数据
    school = '清华大学'
    # 学生类公共的功能
    def choose_course(self):  # self为自动生成,是必须要的,不然无法创建对象
        print('学生选课功能')

定义完一个类后,我们可以使用__dict__方法查看类的内部名称空间。

print(Student.__dict__)  # 返回值是一个字典

获取类中的数据或调用类中的功能

# 方法一:
print(Student.__dict__['school'])  # 获取类中的属性
print(Student.__dict__['choose_course'])  # 获取类中的属性

# 方法二:
print(Student.school)  # 获取类中的属性
print(Student.choose_course)  # 获取类中的属性

类名加括号就是在创建一个对象

stu1 = Student()

print(stu1.school)  # 获取类中的属性
stu1.choose_course()  # 调用类中的方法

我们也可以修改类中的属性

# 修改类中school的值
Student.school = '北京大学'
print(stu1.school)  # 输出:北京大学

image

对象的实例化

在类中可以添加一个函数名为__init__的函数,这个函数可以给对象添加独有的数据,相当于初始化的作用。

class Student:
    def __init__(self, name, age):
        '''self接收对象本身'''
        self.name = name  # 相当于:对象.__dict__['name'] = name
        self.age = age  # 相当于:对象.__dict__['age'] = age

    # 学生类公共的数据
    school = '清华大学'
    # 学生类公共的功能
    def choose_course(self):
        print('学生选课功能')

实例化对象

stu1 = Student('tom', 18)
print(stu1.__dict__)

# 输出结果:{'name': 'tom', 'age': 18}

在这个实例化过程中,stu1 = Student('tom', 18)其实就相当于:

stu1 = Student()
stu1.__dict__['name'] = 'tom'
stu1.__dict__['age'] = 18

而类中的__init__方法就是接收了传来的参数并执行以上语句。

PS:

  1. 函数中的self形参其实就是一个变量名,用于接收对象用的,可以是其他名字,只不过我们约定这样用比较好。
  2. 类中的函数第一个形参都是用于接收对象的,对象在调用函数时自动传入。

动态方法与静态方法

在面向对象中,类的内置函数的第一个参数都是固定接收对象的,这种我们称为动态方法;如果类的内置函数与平常的函数一样,这种我们称为静态方法;

动态方法

1.绑定给对象的方法

class Student:
    def run(self):
        print(self)
Student.run(11)  # 11
Student().run()  # <__main__.Student object at 0x000001B57A5BC390>

类调用绑定给对象的方法:有几个参数就需要传几个参数;
对象调用绑定给对象的方法:自动将对象当做第一个参数传入。

2.绑定给类的方法

class Student:
    @classmethod
    def eat(cls):
        print(cls)

Student.eat()  # <class '__main__.Student'>
Student().eat()  # <class '__main__.Student'>

类调用绑定给类的方法:自动将类当做第一个参数传入。
对象调用绑定给类的方法:自动将该对象所属的类当做第一个参数传入。

静态方法

使用@staticmethod在类的内部函数上声明,这个函数就变成普通的函数了,类和对象调用这个函数都需要传对应的参数。

class Student:
    @staticmethod
    def run(a):
        print(a)
Student.run('类')  # 类
Student().run('对象')  # 对象

image

posted @ 2022-04-06 18:13  Yume_Minami  阅读(78)  评论(0编辑  收藏  举报