新开课day17总结

面向对象编程

1.编程思想

  • 面向过程编程:穷人思想(基本语法、 分支、循环、逻辑思维)

  • 函数式编程:小资思想(基本语法、分支、循环、逻辑思维、函数)

  • 面相对象编程:富豪思想(基本语法、分支、循环、逻辑思维、函数、类、对象)

2.什么是类、什么是对象

  • 类:具有相同功能和相同属性的对象的集合

  • 对象:对象就是类的实例。(是某一 类事物的具体表现)

3.定义类(创建类)

  • 定义类:用代码来描述这个类拥有哪些相同属性和哪些相同功能的集合

数值相关共同特点用属性来描述

  • 属性就是定义在类的变量

非数值相关的共同特点使用方法来描述

  • 方法就是定义在类中的函数

语法:

'''
class 类名:
  类的说明文档
  类的内容
'''

说明:

(1)class:关键字,固定写法

(2)类名:由程序员自己命名,满足命名要求,

  • 三个规范:首字母大写,驼峰式命名,见名知义;不使用系统函数、类、模块名

(3):固定的写法

(4)类的说明文档:多行注释

(5)类的内容:在这用代码来描述这个类相同的功能和属性有哪些

  • 主要包含属性:对象属性、类属性和方法:对象方法、类方法、静态方法

4.创建类的对象

语法:类名+():创建指定类的对象并返回

(1)对象方法

定义:直接定义在类中的函数就是对象方法

调用:以对象.xxx()的方式来调用 :通过调用类

特点:通过对象来调用对象方法的时候默认参数self不需要传参,系统会自动将当前对象传给self (self是谁调用就指向谁)

(2)类方法

定义:需要在定义函数前加@classmatethod

调用:以类.xxx()的方式来调用

特点:通过类来调用类方法的时候默认参数cLs不用传参,系统会自动将当前类传给cls

(3)静态方法

定义:直接定义在类中的函数就是对象方法

调用:以类.xxx()的方式来调用

特点:没有特点

简单案例:

class A:
    def fun(self):
        print("对象方法")
    @classmethod
    def fun1(cls):
        print("类方法")
    @staticmethod
    def fun2():
        print("静态方法")
# 调用对象方法
a = A()
a.fun()
# 那如果我使用类调用情况怎么样呢:答案:不能通过类来调用对象方法,如果硬是要调用,需要再传参
# A.fun()#报错:fun() missing 1 required positional argument: 'self'
A.fun(A())#因此还需要传入参数
# 调用类方法,类调用类方法
A.fun1()
a.fun1()#实际上对象调用也可以,但是某些方法会缺失,所以为确保万无一失,尽量不用
# 调用静态方法,类调用静态方法
A.fun2()
a.fun2()#实际上对象调用也可以,但是某些方法会缺失,所以为确保万无一失,尽量不用

初始化方法

1.魔法方法

定义:方法名由两个下划线开头并且由两个下划线结尾,并且会在特定情况下自动调用的方法就是魔法方法

2.常见的两种魔法方法

(1)def _init_(self):当通过类创建对象的时候,类中的__ init__ 方法会被自动调用

(a)在类中添加__ init__方法的时候,可以根据需要在方法中随意添加参数。

class S:
    def __init__(self):
        print('__init__被调用')
S() #__init__被调用

(b)___init__方法中添加了额外的参数,那么在创建这个类的对象的时候必须通过类名后面的括号来给__ init__方法提供额外的实参

class s:
    def __init__(self,w,y):
        print('__init__被调用',w,y)
s(2,3) #__init__被调用 2 3

(2)__repr__(self)

a.打印类的对象的时候会自动调用__ repr__ 方法, 并且将这个方法的返回值作为这次打印的打印结果

b.这个方法的返回值必须是字符串,__repr__(self):方法中的self指向的当前的打印对象)

class s:
    def __repr__(self):
        return '__repr__被调用'
print(s())#__repr__被调用

属性

定义:定义在类中的变量

(1)类属性

怎么定义:直接定义在类中的变量

怎么使用:以类.xxx的方式来使用:通过类来使用类属性

class X:
    #类属性
    x= 12
    m = 'qw'
print(X.m)#qw
print(X.x)#12

什么时候用:属性值不会因为对象不一样而不一样,定义为类属性,一般使用场景不多

(2)对象属性

怎么定义:以self.属性名 = 值的形式定义在__init__方法中

怎么使用:以对象.xxx的方式来使用:通过类来使用对象属性

class Y:
    #对象属性
    def __init__(self):
        self.y = 1212
        self.k = 156
a = Y()
print(a.y)#1212
print(a.k)#156

什么时候用:属性值会因为对象不一样而不一样,定有对象属性

class F:
    def __init__(self):
         # 1)直接用一个具体的数据给对象属性赋值
        self.r = 5
         # 2)用一个没有默认值的参数给对象属性赋值
         # self.r = r
         # 3)用一个有默认值的参数给对象属性赋值
         # self.r = r
# 方法1
f = F()
print(f.r)#5
f.r = 20
print(f.r)#20

注意:如果实现函数的功能需要对象属性,那么这个函数必须定义成对象方法,并且在方法中通过self来提供你所需要的对象属性

继承

语法:

'''
语法:
class类名(父类1,父类2....):
    说明文档
    类的内容
注意:如果定义类的时候没有写继承关系,那么这个类默认继承object(基类); (cLass 类名: == cLass 类名(object):)
'''

案例:继承父类并有自己的功能

class father:
    def __init__(self,name='张三',age='56'):
        self.name = name
        self.age = age
    def fun(self):
        return f'{self.name}{self.age}岁'
class son(father):
    def fun_son(self):
        return 'son方法'
    def __init__(self):
        super().__init__()
        self.name = '王五'
        self.age = 13
    def fun_son1(self):
        return f'{self.name}{self.age}岁'
s = son()
print(s.fun_son1())#王五13岁
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值