第九章 1 面向对象程序设计

发布时间:2024年01月04日

两大编程思想=面向过程和对象 p108

面向过程:功能上的封装
面向对象:属性和行为上的封装

面向过程面向对象
区别事物比较简单,可以用线性的思维去解决事物比较复杂,使用简单的线性思维无法解决
共同点1、面向过程和面向对象都是解决实际问题的一种思维方式 2、二者可以相辅相成,并不是对立的。解决复杂问题,通过面向对象方式便于我们从宏观上把握事物之间复杂的关系,方便我们分析整个系统,具体到微观操作,仍然使用面向过程方式来处理

自定义类和创建自定义类的对象 p109

类是怎么来的?
是由若干个对象抽取出共同的属性和行为从而归纳总结出来的一种类别

在Python中一切皆对象:
字符串对象-str字符串类型
整数对象-整数类型

a=10
b=9.1
s='hello'
print(type(a))
print(type(b))
print(type(s))

# 输出中的class就是类的意思

自定义数据类型的语法结构:

class 类名(): # 类名自取,要求首字母大写;小括号可以写也可以省略
	pass

创建对象的语法格式为:

对象名=类名()

代码实例:

# 编写一个Person
class Person():
    pass

# 编写一个Cat类
class Cat():
    pass

class Dog:
    pass

class Student():
    pass

# 类是一个抽象的模板,不是实例

# 创建类的对象
per=Person()
c=Cat()
d=Dog()
stu=Student()
print(type(per),type(c),type(d),type(stu))

类的组成 p110

1、类属性:直接定义在类中,方法外的变量
2、实例属性:定义在__init__方法中,使用self打点的变量
3、实例方法:定义在类中的函数,而且自带参数self
4、静态方法:使用装饰器@staticmethod修饰的方法
5、类方法:使用装饰器@classmethod修饰的方法

代码实例:

class Student:
    # 类属性:定义在类中,方法外的变量
    school='北京xx教育'
    # 初始化方法
    def __init__(self,name,age): # name,age是方法的参数,是局部变量,name和age作用域是整个__init__方法
        self.name=name # 左侧试实例属性,将局部变量的值赋值给实例属性
        self.age=age # 同上
    # 定义在类中的函数,称为方法,自带一个参数叫做self
    def show(self):
        print(f'我叫{self.name},今年{self.age}岁')

    # 静态方法
    @staticmethod
    def sm(): # 不会自带self,小括号中写了才会有
        print('这是一个静态方法,不能调用实例属性,也不能调用实例方法')

    # 类方法
    @classmethod
    def cm(cls): # cls是class的简写,会自动补全
        print('这是一个类方法,不能调用实例属性,也不能调用实例方法')


stu=Student('tom',17) # 对应类中的init方法,self无需写
# 实例属性,使用对象名进行打点调用
print(stu.name,stu.age)
# 类属性,使用对象名进行打点调用
print(stu.school)
# 实例方法,使用对象名进行打点调用
stu.show()
# 类方法,使用@classmethod进行修饰的方法,使用类名打点调用,注意是类名,不是实例名
Student.cm()
# 静态方法 使用@staticmethod进行修饰的方法,直接使用类名打点调用
Student.sm()

使用类模板创建N多个对象 p111

class Student:
    # 类属性:定义在类中,方法外的变量
    school='北京xx教育'
    # 初始化方法
    def __init__(self,name,age): # name,age是方法的参数,是局部变量,name和age作用域是整个__init__方法
        self.name=name # 左侧试实例属性,将局部变量的值赋值给实例属性
        self.age=age # 同上
    # 定义在类中的函数,称为方法,自带一个参数叫做self
    def show(self):
        print(f'我叫{self.name},今年{self.age}岁')

    # 静态方法
    @staticmethod
    def sm(): # 不会自带self,小括号中写了才会有
        print('这是一个静态方法,不能调用实例属性,也不能调用实例方法')

    # 类方法
    @classmethod
    def cm(cls): # cls是class的简写,会自动补全
        print('这是一个类方法,不能调用实例属性,也不能调用实例方法')


# 根据图纸创建多个对象
stu=Student('ysj',18)
stu2=Student('cmm',20)
stu3=Student('ml',21)
stu4=Student('marry',23)

# 类属性直接赋值
Student.school='Python教育'

lst=[stu,stu2,stu3,stu4]

for item in lst:
    item.show()
文章来源:https://blog.csdn.net/engineer0/article/details/135379165
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。