5-6日总结面向对象

面向对象

一、编程思想,认识类、对象

1 什么是类、什么是对象

类 - 类是拥有相同功能和相同属性的对象的集合。(类是一个抽象的概念)
对象 - 对象是类的实例(是类的具体表现)

从生活的角度:如果人是类,单独个人就是对象

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

功能:- 函数
属性:- 属性(保存数据的变量)

语法:
class 类名:
类的说明文档
类的内容(包括类的属性和方法)

注解:方法 - 定义在类中的函数
属性 - 定义在类中的变量

说明:
class - 关键字;固定写法
类名 - 有程序员自己命名,必须符合名要求和规范
要求:是标识符;不能是关键字
规范:见名知义;采用驼峰式命名(由多个单词组成,单词间通过首字母大写来区分),第一个 字母大写
不使用系统的函数名、类名或者模块名
类的说明文档 - 本质就是多行注释
类的内容 - 由方法和属性组成
方法包括:对象方法、类方法和静态方法
属性包括:类属性(字段)和对象属性两种

3 创建对象

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

语法:
对象=类名()

二 方法与属性

(1)方法

类中的方法分为三种:对象方法、类方法、静态方法

1对象方法
1)怎么定义:直接定义在类中的函数就是对象方法
2)怎么调用:通过对象来调用 — 对象.对象方法()
3)特点:用对象调用对象方法的时候,参数self不需要传参,系统会自动将当前对象传给self(谁去调用的这个方法当前对象就是谁)

2类方法

1)怎么定义:定义函数前加@classmethod
2)怎么调用:通过类来调用 - 类.类方法
3)特点:参数cls不需要传参,系统会自动将当前类传给cls

3静态方法

1)怎么定义:定义函数前加@staticmethod
2)怎么调用:通过类来调用 - 类.静态方法
3)特点:没有特点

方法选择

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

构造方法和init方法

1.构造函数 - 名字和类名一样,专门用来创建对象的函数
python中创建类的时候,系统会自动为我们创建这个类的构造函数

补充:魔法方法的特点
1)方法名是__ 开头并以__结尾
魔法方法不需要程序员主动调用,在特定事件被触发后系统会自动调用

2.__init__方法

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

class Student:
    def __init__(self):
        print('init方法')

stu1=Student()
stu2=Student()
"""
通过类创建对象的时候需不需要参数,需要几个参数,由这个类中的__init__决定。(看__init__除了self以外有没有额外的参数)
"""
class Dog:
    def __init__(self,x,y):
        print('init方法:',x,y)

dog=Dog(10,20)
dog=Dog(x=100,y=200)

(2) 属性

属性分为:对象属性和类属性(字段)

1类属性

1)怎么定义:直接在类中定义一个变量,这个变量就是类属性
2)怎么使用:通过类来使用——类.类属性
3)什么时候用:属性值不会因为对象不同而不一样就将这个属性定义成类属性

2对象属性

1)怎么定义:以‘self.属性名=值’的形式定义在__init__方法中
2)怎么使用:通过对象来使用 - 对象.对象属性
3)什么时候用:属性会因为对象不同而不一样就将这个属性定义成对象属性

class A:
    # x是类属性
    x=100

    def __init__(self):
        self.y=200

print(A.x)
a=A()
print(a.y)
a.y=20
print(a.y)

class Circle:
    pi=3.1415926

    def __init__(self):
        self.r=0
# 3.__init__方法的扩展
# 1)如果类需要对象属性,就需要在类中添加__init__
# 2)可以通过在__init__中添加参数来实现创建对象的时候直接给属性赋值

class Student:
    def __init__(self,name):
        self.name=name

作业

  1. 定义一个狗类和一个人类:

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

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

class Dog:
    def __init__(self,name,gender,vari):
        self.name=name
        self.gender=gender
        self.vari=vari
    @classmethod
    def call(self):
        print('汪')


class People:
    def __init__(self,name,age,dog:Dog):
        self.name=name
        self.age=age
        self.dog=dog

    def Walk(self):
        print('会遛狗')
  1. 定义一个矩形类,拥有属性:长、宽 拥有方法:求周长、求面积

    class rectangular:
        def __init__(self,width,height):
            self.width=width
            self.height=height
    
        def area(self):
            return self.width*self.height
    
        def peri(self):
            return (self.width+self.height)*2
    
  2. 定义一个二维点类,拥有属性:x坐标、y坐标 拥有方法:求当前点到另外一个点的距离

    class Point:
        def __init__(self,x,y):
            self.x=x
            self.y=y
    
        def distance(self,x2,y2):
            dist=((x2-self.x)**2+(y2-self.y)**2)**0.5
            return dist
    
  3. 定义一个圆类,拥有属性:半径、圆心 拥有方法:求圆的周长和面积、判断当前圆和另一个圆是否外切

    class Circle:
        def __init__(self,r,center:Point):
            self.r=r
            self.center=center
    
        def area(self):
            return self.r **2*pi
    
        def peri(self):
            return self.r* 2 *pi
    
        def tangent(self,p2:Point,r2):
            if self.r+r2==Point(self.center.x,self.center.y).distance(p2.x,p2.y):
                print('这两个圆相切')
            else:
                print('这两圆不相切')
    
  4. 定义一个线段类,拥有属性:起点和终点, 拥有方法:获取线段的长度

    class Line:
        def __init__(self,p1:Point,p2:Point):
            self.p1=p1
            self.p2=p2
    
        def long(self):
            return Point(self.p1.x,self.p1.y).distance(self.p2.x,self.p2.y)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值