day17 面向对象基础

一.编程思想

1.编程思想:程序员在面对一个问题的时候首先想到的解决这个问题的想法
2.三种编程思想:
  1. 面向过程编程(穷人思想) - 会基本语法和逻辑

  2. 函数式编程(小资思想) - 会基本语法和逻辑还需要函数

  3. 面向对象编程(富豪思想) - 会基本语法和逻辑、函数还需要类和对象

# 练习:计算8的阶乘!
# 1 * 2 * 3 * 4 * ... * 8
s = 1
for x in range(1, 9):s *= x
print(s)import math
print(math.factorial(8))def factorial(N):s = 1for x in range(1, N+1):s *= xreturn sprint(factorial(8))

二.认识类和对象

1.什么是类,什么是对象

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

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

从生活的角度:如果人是类,余婷就是对象、骆昊是另外一个对象

​ 如果杯子是类,我手上的这个杯子就是对象

2. 定义类(创建类) - 用代码来描述清楚这个是到底是拥有哪些相同功能和哪些相同属性的对象的集合
功能 - 函数
属性 - 属性(保存数据的变量)

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

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

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

class Student:"""学生类"""passclass Dog:"""狗类"""pass
3.创建对象
对象是类的实例,创建对象必须通过类来创建。

语法:
对象 = 类名()

# 创建两个学生类的对象
s1 = Student()
s2 = Student()
print(s1, s2)# 创建一个狗的对象
dog = Dog()
print(dog)

三.方法

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

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

2.类方法
1)怎么定义:定义函数前加@classmethod
2)怎么调用:通过类来调用   -   类.类方法()
3)特点:参数cls不需要传参,系统会自动将当前类传给cls
3.静态方法
1)怎么定义:定义函数前加@staticmethod
2)怎么调用:通过类来调用  - 类.静态方法()
3)特点:没有特点
class A:"""无意义的类"""def func1(self):print('对象方法')print(f'self:{self}')@classmethoddef func2(cls):print('类方法')@staticmethoddef func3():print('静态方法')# 创建A的对象
a1 = A()
a2 = A()
print(f'a1:{a1}')
print(f'a2:{a2}')# 用对象调用对象方法
a2.func1()# 用类调用类方法
A.func2()# 用类调用静态方法
A.func3()list1 = [10, 20, 30]
list1.append(100)
4.类中函数的参数
class B:def func1(self, x: int, y=10):print(f'x:{x}, y:{y}')@classmethoddef func2(cls, x, *, y, z):print(f'x:{x}, y:{y}, z:{z}')@staticmethoddef 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__方法
1)
“”"
当通过类创建对象的时候,类中__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)
dog2 = Dog(x=100, y=200)

五.属性

属性分为:对象属性和类属性(字段)
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.x = 200
print(A.x)# 通过对象使用对象属性
a = A()
print(a.y)
a.y = 300
print(a.y)class Circle:pi = 3.1415926def __init__(self):self.r = 0
3. __init__方法的扩展

1)如果类需要对象对象属性,就需要在类中添加__init__
2)可以通过在__init__中添加参数来实现创建对象的时候直接给属性赋值

class Person:def __init__(self, name, gender='男'):self.name = nameself.gender = genderself.age = 0p1 = Person('小花', '女')p2 = Person('张三')print(p1.name, p1.gender)
print(p2.name, p2.gender)

六.方法的选择

1. 选择
如果实现函数的功能需要对象(对象属性)就用对象方法;如果需要类就用类方法;如果都不需要就用静态方法
class Rect:def __init__(self, width=0, height=0):self.width = widthself.height = height# 在实现对象方法的功能的时候如果需要的数据是对象相关数据,那么这个数据就由self来提供。def area(self):# self = r2# self = r1return self.width * self.height     # return r2.width * r2.height  -> return 5 * 8  -> return 40r1 = Rect(10, 20)
r2 = Rect(5, 8)
print(r2.area())
print(r1.area())# 练习:定义一个圆类,拥有属性半径和圆周率,拥有方法:求面积和求周长
class Circle:# 类属性pi = 3.1415926def __init__(self, r):self.r = rdef area(self):# 这个类的对象能做的事情,self都可以做return Circle.pi * self.r ** 2def perimeter(self):return 2 * Circle.pi * self.rc1 = Circle(10)
c2 = Circle(2)print(c1.area())
print(c2.perimeter())

作业

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

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

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

    class Dog:def __init__(self, name, gender, var):self.name = nameself.gender = genderself.var = varclass Person:def __init__(self, name1, years, dog):self.name1 = name1self.years = yearsself.dog = dogcry_out = Dog('来福', '公', '泰迪')
    print(cry_out.name, cry_out.gender, cry_out.var)walk_the_dog = Person('常威', 20, cry_out)
    print(walk_the_dog.name1, walk_the_dog.years, walk_the_dog.dog)
    
  2. 定义一个矩形类,拥有属性:长、宽 拥有方法:求周长、求面积

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

    class Dot:def __init__(self, x, y):self.x = xself.y = ydef distance(self, other):return ((self.x - other.x) ** 2 + (self.y - other.y) ** 2) ** 0.5d1 = Dot(10, 20)
    d2 = Dot(20, 30)
    print(d1.distance(d2))
    
  4. 定义一个圆类,拥有属性:半径、圆心 拥有方法:求圆的周长和面积、判断当前圆和另一个圆是否外切

    class Circle:pi = 3.1415926def __init__(self, r1, x1, y1, ):self.r1 = r1self.x1 = x1self.y1 = y1def area(self):return Circle.pi * self.r1 ** 2def perimeter(self):return 2 * Circle.pi * self.r1def excircle(self, other):if ((other.x1-self.x1) ** 2 + (other.y1 - self.y1) ** 2) ** 0.5 == self.r1 + other.r1:print('外切')else:print('不外切')
  5. 定义一个线段类,拥有属性:起点和终点, 拥有方法:获取线段的长度

    class Lines:def __init__(self, x1, y1, x2, y2):self.x1 = x1self.y1 = y1self.x2 = x2self.y2 = y2def lengths(self):return ((self.x1 - self.x2) ** 2 + (self.y1 - self.y2) ** 2) ** 0.5l1 = Lines(0, 20, 35, 14)
    print(l1.lengths())

day17 面向对象基础相关推荐

  1. 第三模块 面向对象网络并发编程 | day17 面向对象基础

    第三模块 面向对象&网络&并发编程 从今天开始,我们将进入系列课程第3个模块的的学习,此模块包含如下三大部分知识: 面向对象,Python中支持两种编程方式来写代码,分别是:函数式编程 ...

  2. day17面向对象基础

    面向对象基础 一.类和对象 什么类:拥有相同功能相同属性的对象的集合 什么对象:对象是类的实例 从生活的角度理解类和对象的集合 (抽象的概念) 杯子是类,塑料杯是对象,铁杯子是对象 # 创建类和创建对 ...

  3. Javascript基础与面向对象基础~第四讲 Javascript中的类对象

    今天来说JS中如何实现类(class),事实上本应该昨天晚上写的,可我失言了,在些说一声"抱歉"!JS中的类是JS面向对象的基础,也是我最拿手的东西,你写的代码能否提高一个层次,一 ...

  4. JavaScript – 6.JS面向对象基础(*) + 7.Array对象 + 8.JS中的Dictionary + 9.数组、for及其他...

    6.JS面向对象基础(*) 7.Array对象 7.1 练习:求一个数组中的最大值.定义成函数. 7.2 练习:将一个字符串数组输出为|分割的形式,比如"刘在石|金钟国|李光洙|HAHA|宋 ...

  5. java中sum=a+aa+aaa_Java面向对象基础IO系统

    Java面向对象基础–IO系统 一.IO 输入:input 输出:output Java的IO主要包含三个部分 流式部分:IO的主题部分 非流式部分:主要包含一些辅助流式部分的类 文件读取部分的与安全 ...

  6. 石川es6课程---9、面向对象-基础

    石川es6课程---9.面向对象-基础 一.总结 一句话总结: js老版本的面向对象和继承都不是很方便,新版的面向对象向其它语言靠拢,有了class,extends,constructor等关键字,用 ...

  7. C++面向对象基础(二)

    面向对象基础 能够准确理解下面这些问题是从C程序员向C++程序员进阶的基础.当然了,这只是一部分. 面向对象三大特性? 封装性:数据和代码捆绑在一起,避免外界干扰和不确定性访问. 继承性:让某种类型对 ...

  8. Python面向对象基础示例_创建对象

    Python面向对象基础示例_创建对象 python是面向对象的语言,你可以很轻松的创建一个类和对象.本书代码源自<<Python 3 Object-Oriented Programmin ...

  9. PHP面向对象基础总结

    近来参加了几场PHP工程师的面试,但是笔试题答得都不理想,回来总结了一下失败的原因,是没看PHP手册.几家公司的PHP基础面试题都可以在PHP手册上找到.哎,现在才知道最好的面试宝典是PHP手册. 下 ...

最新文章

  1. 怎样才算世界一流大学
  2. mysql 使用手册 权限_创建MySQL用户及用户权限管理
  3. 谈大数据里各子项目搭建时的环境变量配置(深入)
  4. 15.基于Hadoop的数据仓库Hive第2部分
  5. Python之路,day4-Python基础
  6. Windows 中_T和L
  7. Redis中三种特殊数据类型
  8. 深度学习笔记(14) 评估指标
  9. Oracle Database 中 B*Tree 索引内部维护
  10. 你是码农还是Geek?
  11. 如何利用工业大数据降本增效
  12. Lync Server 2010迁移至Lync Server 2013部署系列 Part13:DNS记录变更
  13. maven scm 配置git
  14. Fedora Linux 14百度云下载,Fedora Linux 14下载
  15. HDOJ1233 还是畅通工程(kru)
  16. rabbitmq User can only log in via localhost
  17. C语言程序——首字母变大写
  18. linux ahci 不重装,老电脑竟然忘记开AHCI了,教你种不用重装系统的解决方法
  19. 你真的了解“药品追溯码”吗?
  20. 第6章 PPT页面排版与高级设计技术

热门文章

  1. 大专学历走社招,两个部门,六轮面试,终与字节无缘
  2. 浙大pythonpta作业答案_浙大PTA-Python题库 编程题第一章(1-1~1-3)题解
  3. 4G、5G RLC AM模式数据和控制报文格式的区别
  4. One-Error多标签分类_多分类及多标签分类算法
  5. 第六章(项目进度管理)知识点
  6. Unity 语音识别以及音频可视化
  7. 大话设计模式系列之面向对象基础(一)
  8. Zabbix Server trapper命令注入漏洞(CVE-2020-11800)
  9. Oracle数据库数据查询语句示例(包含大部分常用语句)
  10. Go语言环境配置 Sublime Text + GoSublime+ gocode + MarGo组