栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python面向对象基础

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python面向对象基础

面向对象基础 1.编程思想

编程思想:程序员在面对一个问题得时候首先想到的解决这个问题的方法
三种编程思想:
1.面向过程编程 - 会基本语法和逻辑
2.函数式编程 - 会基本语法和逻辑还需要函数
3.面向对象编程 - 会基本语法和逻辑、函数还需要类和对象

2.认识类和对象 1.什么是类什么是对象

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

从生活的角度:如果人是类,那么具体的人就是对象
如果杯子是类,那么具体的某个杯子就是对象

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

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

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

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

说明:
class - 关键字;固定写法
类名 -由程序员自己命名,必须符合名要求和规范
要求:是标识符;不是关键字
规范:见名知义;采用驼峰式命名(由多个单词组成,单词之间通过首字母大写来区分),第一个字母大写;
不使用系统的函数名、类名和模块名

类的说明文档 - 本质就是多行注释
类的内容 - 由方法和属性组成
方法包括:对象方法、类方法和静态方法三种
属性包括:类属性(字段)和对象属性两种

3.创建对象

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

语法:
对象 = 类名()

3.方法

类中的方法包括:对象方法、类方法和静态方法

1.对象方法

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

2.类方法

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

3.静态方法

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

示例:

class A:
    def func1(self):
        print(self)
        print('对象方法')

    @classmethod
    def func2(cls):
        print('类方法')

    @staticmethod
    def func3():
        print('静态方法')

# 创建A的对象
a1 = A()
a1.func1()

A.func2()

A.func3()


# 4.类中函数的参数


class B:
    def func1(self,x,y):
        print(x,y)

    @classmethod
    def func2(cls,x,y):
        print(x,y)


b = B()
b.func1(1,2)

B.func2(3,4)

4.构造函数和init方法 1.构造函数 - 名字和类一样,专门用来创建对象的函数就是构造函数

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

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

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)


dog1 = Dog(10,20)
5.属性

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

1.类属性

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

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

示例:

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

    # y是对象属性
    def __init__(self):
        self.y = 200


# 通过类使用类属性
print(A.x)

# 通过对象使用对象属性
a = A()
print(a.y)
a.y = 300
print(a.y)
3. _ init _方法扩展
# 1)如果类需要对象属性,就需要在类中添加__init__
# 2)可以通过在__init__中添加参数来让创建对象得时候直接给属性赋值的目的

示例:

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



stu1 = Student('张三')
print(stu1.name,stu1.gender)
6.方法的选择 1.选择

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

2.对象方法的使用
class Rect:
    def __init__(self, width=0, height=0):
        self.width = width
        self.height = height

    # 在实现对象方法的功能的时候如果需要的数据是对象相关数据,那么这个数据就有self来提供
    def area(self):
        return self.width * self.height


r1 = Rect(10, 20)
r1.height = 200

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

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


class Circle:
    def __init__(self, r):
        self.r = r

    def long(self):
        return 2 * self.r * math.pi

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


cycle1 = Circle(6)
print(cycle1.long(), cycle1.area())
  1. 定义一个狗类和一个人类:

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

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

    class Human:
        def __init__(self,name,age,dog_name):
            self.name = name
            self.age = age
            self.dog_name = dog_name
        def func1(self):
            return '遛'+self.dog_name
    
    class Dog:
        def __init__(self,name,brand,grend='公'):
            self.name = name
            self.brand = brand
            self.grend = grend
        def dogfunc1(self):
            return self.name+'叫唤'
    
    
    person1 = Human('张三',22,'小白')
    print(person1.func1())
    
    dog1 = Dog('小白','哈士奇')
    print(dog1.dogfunc1())
    
  2. 定义一个矩形类,拥有属性:长、宽 拥有方法:求周长、求面积

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

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

    class DoubleCircle:
        pi = 3.14
        def __init__(self, x1, y1, r1):
            self.x1 = x1
            self.y1 = y1
            self.r1 = r1
        def len(self):
            return 2*self.pi*self.r1
        def area(self):
            return self.pi*self.r1**2
    
    
        def circumscribed(self,x2,y2,r2):
            if ((self.x1 - x2) ** 2 + (self.y1 - y2) ** 2) ** 0.5 == self.r1 + r2:
                return '外切'
            else:
                return '不外切'
    
    
    s = DoubleCircle(0, 0, 1)
    print(s.len())
    print(s.area())
    print(s.circumscribed( 2, 0, 1))
    
    
  5. 定义一个线段类,拥有属性:起点和终点, 拥有方法:获取线段的长度

    class Line:
        def __init__(self, star_x, star_y):
            self.star_x = star_x
            self.star_y = star_y
    
    
    
        def len(self,x,y):
            return ((self.star_x - x) ** 2 + (self.star_y - y) ** 2) ** 0.5
    
    
    s = Line(0, 0)
    print(s.len(3,4))
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/861655.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号