day -17 总结

本文介绍了面向对象编程的基础概念,包括类的定义、对象的创建、方法的分类(对象方法、类方法、静态方法)、构造函数与`__init__`方法的应用,以及属性(类属性与对象属性)。通过实例演示了如何定义和使用这些概念,并探讨了如何根据功能选择不同的方法类型。
摘要由CSDN通过智能技术生成

面向对象基础

  • 编程思想

# 编程思想
# 三种编程思想:
# 1.
面向过程编程
# 2.函数式编程
# 3.面向对象编程

# 练习:计算8的阶乘
# 方法一:
s = 1
for x in range(1,9):
        s *= x

print(s)

import math
print(math.factorial(8))

  • 认识类和对象
# 1. 什么类,什么是对象

'''

  - 类是对拥有相同功能和相同属性的对象的集合(是一个抽象的概念)

对象 - 对象是类的实例(具体表现)



从生活的角度: 如果人是类,某个具体的人就是对象,另一个就是另一个对象

             如果杯子是类,具体的杯子就是对象

'''



# 2.程序中定义类(创建)   - 用代码来描述清楚这个是到底是拥有哪些相同功能的和哪些相同属性的对象的集合

# 功能   -  函数

# 属性   -  属性(保存数据的变量)

'''

语法:

class 类名:

        类的说明文档

        类的内容(包括类的属性和方法)



注解:方法  - 定义在类中的函数

     属性   - 定义类中变量



说明:

class  - 关键字:固定写法

类名    -  自己命名,必须符合要求

          要求:是标识符 不能是关键字

           规范:见名知义;采用驼峰式命名(由多个单词组成,单词之间通过首字母大写区分),第一个字母大写

                不使用系统函数名类名或者模块名

类的说明文档   -   本质就是多行注释

类的内容       -    包含方法和属性组成

                    方法包括:对象方法,类方法和静态方法三种

                    属性包括: 类属性和对象属性两种

                        

'''

class Student:

        '''学生类'''

        pass

class Dog:

        '''学生类'''

        pass





# 3.创建对象

# 对象是类的实例,创建对象必须通过类来创建.

'''

语法:

对象 = 类名()



'''

# 创建两个学生类的对象

s1 = Student()

s2 = Student()

print(s1,s2)



# 创建一个狗的对象

dog = Dog()

print(dog)
  • 方法
# 类中方法包含三种:对象方法.类方法.静态方法

# 1.对象方法

'''

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

2)怎么调用:通过对象来调用   -  对象.对象方法()

3)特点:用对象调用对象方法的时候,参数self不需要传参,系统会自动将当前对象传给self



'''

# 2.类方法

'''

1)怎么定义:@classmata装饰器定义函数前

2)怎么调用:通过类来调用  - .类方法()

3)特点:参数cls不需要传参,系统会自动将当前类传给cls

'''

# 3.静态方法

'''

1)怎么定义: @staticmethod定义函数前

2)怎么调用:通过类来调用  - .类方法()

3)特点:没有特点

'''





class A:

        '''无意义的类'''

        def func1(self):

                print('对象方法',self)

        @classmethod

        def func2(cls):

                print('类方法')

        @staticmethod

        def func3():

                print('静态方法')

#



aaa = A()

print(aaa)  #<__main__.A object at 0x00000206A0647F10>

aaa.func1()  #对象方法#对象方法 <__main__.A object at 0x00000206A0647F10>

A.func2()   # 类方法

A.func3()   # 静态方法



# 4. 类中函数的参数



class B:

        def func1(self,x,y=10):

                print(f'x:{x},y:{y}')

        @classmethod

        def func2(cls,x,*,y,z):

                print(f'x:{x},y:{y},z:{z}')

        @staticmethod

        def func3(x,y):

                print(x,y)



b = B()

b.func1(100)

b.func1(100,200)

b.func1(x=11,y=12)



B.func2(10,y=20,z=30)
  • 构造函数和init方法
# 1.构造函数 - 名字和类名一样,专门用来创建对象的函数

# python中创建类的时候,系统会自动创建这个类的构造函数



#补充:魔法方法

# 1)方法名是两个下划线开头两个下划线结尾

# 2)系统会自动调用,不需要主动调用,在特定时间被触发后系统会自动调用



# 2.__init__方法

'''

当通过类创建对象的时候,类中__init__方法会被自动调用

(每次通过类创建对象的时候,类中的__init__都会被自动调用)

'''



class Student:

        def __init__(self):

                print('init方法')





stu = Student()

stu1 = Student()



# 2)

'''

通过类创建对象的时候需不需要参数,需要几个参数,由这个类中的__init__决定.看除了self有几个参数



'''

class Dog:

        def __init__(self,x,y):

                print('init方法:',x,y)



dog1 = Dog(10,20)

dog2 = Dog(x=100,y=200)
  • 属性
# 属性分为:对象属性和类属性(字段)

# 1.类属性

'''

怎么定义:直接在类中定义一个变量,这个变量就是类属性

怎么使用:通过类来使用 - .类属性

什么时候用:属性值不会因为对象不同而不一样就将这个属性定义为类属性

'''

# 2.对象属性

'''

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

怎么使用:通过对象来使用 - 对象.对象属性

什么时候用:属性会因为对象不同而不一样就将这个属性定义成对象属性

'''





class A:

        # x是类属性

        x = 100

        # y是对象属性

        def __init__(self):

                self.y=200

                print('s')

A.x =200

print(A.x)



a1 = A()

print(a1.y)

a1.y =300

print(a1.y)





class Circle:

        pi = 3.1415926



        def __init__(self):

                self.r = 0



# 3.__init__方法的拓展

# 1)如果类需要对象属性,就需要在类中加__init__

# 2)可以通过在__init__中添加参数来实现创建对象的时候直接给属性赋值的目的

class Student:

        def __init__(self,name,gender = ''):

                self.name = name

                self.gender = gender

                self.age = 0



p1 = Student('小花','')



p2 = Student('张三')

print(p1.name,p1.gender)

print(p2.name,p2.gender)
  • 方法和选择
# 1.选择

# 如果实现函数的功能需要对象(对象属性)就用对象方法;如果需要类就用类就类方法;不需要就用静态方法



# 2.对象方法的使用

class Rect:

        def __init__(self,width=0,height=0):

                self.width = width

                self.height = height

                self.area = width * height

r1 = Rect(10,20)

print(r1.width,r1.height,r1.area)

r1.width = 100

print(r1.width,r1.height,r1.area)    # 这样写面积没变



class Rect11:

        def __init__(self,width=0,height=0):

                self.width = width

                self.height = height

        def area(self):

                return self.width*self.height

rr1 = Rect11(10,20)

rr2 = Rect11(5,8)

print(rr2.area())





# 练习:定义一个圆类,拥有属性半径和圆周率,拥有方法:求面积和求周长

class Circle:

        def __init__(self,r):

                self.pi = 3.1415926

                self.r = r

        def area(self):

                #这个类的对象能做的事情,self都可以做

                return self.r*(self.pi**2)

        def length(self):

                return self.r*2*self.pi

ri = Circle(2)

print(ri.area(),ri.length())

这个圆周率最好是写成类属性,不然不合实际就是Circle.pi来调用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值