2021-03-25

面向对象基础

编程思想

1.面向过程编程 - 逻辑+基本语法

2.函数式编程 - 函数+逻辑+基本语法

3.面向对象编程 - 类和对象+函数+逻辑+基本语法

类和对象

:拥有相同属性和相同功能的对象的集合(抽象)
对象:是类的实例(具体)

2.定义类(创造类)
语法:
class 类名:
类的说明文档
类的内容

说明:
类名 - 第一个字母大写,单词采用驼峰式命名
类的内容 :
a.描述当前这个类是拥有哪些共同属性(变量)和哪些共同功能(函数)的对象的集合
b.包括属性和方法两个部分
c.属性:对象属性和类属性两种
d.方法(定义在类中的函数就叫方法):对象方法、类方法、静态方法三种

3.创建对象
语法:
对象=类名()

对象方法

class 类名:
类属性:
对象属性:
对象方法:
类方法:
静态方法:

1.对象方法
怎么定义:直接在类中定义函数
怎么调用:通过’对象.'的形式来调用
特点:有一个自带的参数self,这个参数在调用的时候不用传参,因为系统会自动将当前对象传给self(睡调用self就指向谁)

构造方法和初始化方法

1.构造方法:方法名和类名一并且是用创建对象的方法就叫构造方法
python中在定义类的时候,系统会自动帮我创建好这个类的构造方法

2.初始化方法__init__
1)当调用构造方法创建对象的时候,系统会再动调用这个类的__init__方法
2)创建对象的时候构造方法需不需要参数,需要几个,参数类中__init__方法除了self意外有没有额外的参数有几个

类中属性

1.属性
属性分为类属性和对象属性两种
1)类属性(字段)
怎么定义:直接定义再类中的变量就是类和、属性
怎么使用:通过’类.'的形式来使用
什么时候用:属性值不会因为对象不同而不一样的属性就需要定义成类属性,例如:圆类中的圆周率

2)对象属性
怎么定义:以’self.属性 = 值’的形式定义再__init__方法
怎么使用:通过’对象.'的形式来使用
什么时候用:会因为对象 不同而不一样的属性就需要定义成对象属性:列如:人类的姓名、年龄、性别:圆的半径

2.对象属性默认值的赋值方式
1)给一个固定的默认值:用于对于这个类来讲,绝大部分对象对应的这个属性值都是同一个值
2)给一个没有默认值 ,比如下面的name
3)给一个有默认值的参数

方法

1.方法
1)对象方法
怎么定义:直接定义再类中的函数
怎么调用:通过对象来调用
特点:自带参数self,调用的时候self不需要传参,系统会自动将当前对象传self(谁调用指向谁)
什么时候用:如果实现函数的功能需要对象属性就定义

2)类方法
怎么定义:再类中定义函数前加装饰器:@classmethod
怎么调用:通过类来调用
特点:自带参数cls,调用的时候cls不需要传参,系统会自动将当前类传给cls
什么时候用:实现函数功能的时候再不需要对象属性的前提下需要类 ,就定义成类方法

3)静态方法
怎么定义:在类中定义函数前加装饰器:@staticmethod
怎么调用:通过类来调用
特点:无
什么时候用:实现函数的功能既不需要对象也不需要类

  1. 定义一个矩形类,拥有属性:长、宽 拥有方法:求周长、求面积

    class Rectangular:
        def __init__(self, long:int, wide:int):
         self.long = long
            self.wide = wide
    
        def perimeter(self):
            return f'周长{self.long*2 + self.wide*2}'
    
        def area(self):
            return f'面积{self.long*self.wide}'
    
    p1=Rectangular(3, 4)
    a = p1.perimeter()
    print(a)
    b = p1.area()
    print(b)
    
  2. 定义一个二维点类,拥有属性:x坐标、y坐标 拥有方法:求当前点到另外一个点的距离

class TwoDImePoint:
    def __init__(self, x=0.0, y=0.0):
        self.x = x
        self.y = y

        # 第四题的线段类
    def ditance(self, x1, y1):
        line1 = LineSegment((self.x, self.y), (x1, y1))
        return line1.how_long()
  1. 定义一个圆类,拥有属性:半径、圆心 拥有方法:求圆的周长和面积、判断当前圆和另一个圆是否外切
class Circle:

    pi = 3.1415926

    def __init__(self, r, x, y):
        self.r = r
        self.x = x
        self.y = y
     def perimeter(self):
        return 2 * Circle.pi * self.r

    def area(self):
        return self.r**2 * Circle.pi

    def set_x(self):
        return self.x

    def set_y(self):
        return self.y

    def set_r(self):
        return self.r

        
  1. 定义一个线段类,拥有属性:起点和终点, 拥有方法:获取线段的长度
class LineSegment:
    def __init__(self, coordinate1:tuple, coordinate2:tuple):
        self.begin = coordinate1
        self.end = coordinate2

    def how_long(self):
        return ((self.begin[0]-self.end[0])**2 + (self.begin[1]-self.end[1])**2)**(1/2)
 
  1. 定义一个狗类和一个人类:

    狗拥有属性:姓名、性别和品种 拥有方法:叫唤

    class Dog:
        def __init__(self, name, gender, breed ):
         self.name = name
            self.gender = gender
         self.breed = breed
        def __repr__(self):
         return f'name:{self.name}, gender:{self.gender},breed:{self.breed}'
    
    
        def skills_(self):
         print('叫唤')
    

dog = Dog(‘佩奇’, ‘女’, ‘吉娃娃’)
print(dog)
dog.skills_()

人类拥有属性:姓名、年龄、狗 拥有方法:遛狗

class Human:
    def __init__(self, name, age, dog=None):
        self.name = name
        self.age = age
        self.dog = dog

    def __repr__(self):
        return f'{self.name}   {self.age}   {self.dog}'

    def liugou(self):
        print(f'{self.dog}')

h1 = Human('zhangsan', '3', dog)
print(h1)

h1.liugou()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值