01 编程思维

根据面对问题不同人层显出来的思维模式不同,可以将编程思维分为三种:
1.面向过程编程(穷人思想) - 遇到问题马上想到是解决这个问题的具体逻辑和步骤
2.函数式编程(小资思想) - 遇到问题马上想到有没有一个已经存在的函数可以解决这个问题,如果没有就造一个(—个函数只具备一个功能)
3.面向对象编程(富豪思想) - 遇到问题马上想到有没有一个具有这个功能的对象,如果没有就造对象(一个对象可以同时具有多个功能)

02 类和对象

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

类就是拥有相同功能或者相同属性的对象的集合
对象就是类的实例。

例:
如果人是类,余婷是对象,骆昊是另一个对象
车是类,宝马是车的子类,骆老师的宝马车就是一个对象

2.定义类 - 创建类

1)定义类:用来代码来描述你的这个类是拥有哪些相同功能(函数)和哪些相同属性(变量)的对象的集合。
2)语法:
class 类名(使用大驼峰方式命名):
类的说明文档
类的内容(包含方法和属性)

3)说明:
a.class - 关键字:固定写法
b.类名 - 由程序员自己命名
两个要求:①是标识符;②不是关键字
规范:见名知义:不使用系统的函数,类名和模块名
例:
user_name - PEP8
userName - 小驼峰
UserName - 大驼峰
c.类的说明文档 - 本质就是一个多行注释
d.类的内容 - 包含定义在类中的函数(方法)和定义在类中的变量(属性)
方法包括:类方法、对象方法、静态方法
属性包括:类属性、对象属性

class Dog:"""这是狗的类"""pass### 3.创建对象>对象是通过类来创建的。
>
>语法:
>类名()dog1 = Dog()
dog2 = Dog()
print(dog1)
print(dog2)

03 类和对象方法

1.什么是方法?

定义再类中的函数就是方法

2.不同方法的使用

1)类方法
a.怎么定义:定义函数前添加装饰器 @classmethod
b.怎么调用:以’类名.xxx()'的形式来调用
c.特点:自带形参cls,调用函数的时候cls不需要传参,系统会自动将当前类传给clas

2)对象方法
a.怎么定义:直接定义再类中的函数就是对象方法
b.怎么调用:以‘对象.xxx()’的形式来调用
c.特点:自带形参self,调用函数的时候self不需要传参,系统会自动将当前对象传给self(谁调用self指向谁)

3)静态方法
a.怎么定义:定义函数前添加装饰器 @staticmethod
b.怎么调用:以‘类名.xxx()’的形式来调用
c.特点:无自带形参

class A:# func1是对象方法(最常用)def func1(self, x):# self = a1print(f'self:{self}')print(f'对象方法:{x}')# func2是静态方法(不常用)@staticmethoddef func2(a, b='b'):print(f'静态方法:a:{a}, b:{b}')# func3是类方法(常用)@classmethoddef func3(cls):print('类方法')

通过对象调用对象方法

print('通过对象调用对象方法----------------------------------------')
a1 = A()
a2 = A()
print(f'a1:{a1}')
print(f'a2:{a2}')
a1.func1(1)
a2.func1(2)
print('\n')

通过类名调用类方法

print('通过类名调用类方法----------------------------------------')
A.func3()
print('\n')

通过类名调用静态方法

print('通过类名调用静态方法----------------------------------------')
A.func2(1)
A.func2(2)
A.func2(2, 'c')
A.func2(b='200', a=100)
print('\n')

例1:将加、减、乘、除、阶乘等功能放在Math类中

class Math:@staticmethoddef sum(n1, n2):pass@staticmethoddef factorial(num):pass

04 __init__方法(魔法方法)

1.魔法方法

1)魔法方法的特点:
a.函数名以’‘开头,并以’'结尾
b.魔法方法不需要程序员自己调用,系统会在特地情况下自动调用

2)两个创建的魔法方法
a.init
如果在类中添加了__init__方法,那么在创建当前类的对象的时候就会自动调用它
创建对象的时候需不需要实参,需要几个实参,由类中的__init__决定

b.repr
如果对本来的打印结果不满意的情况下就使用__repr__来重构打印结果(在类中添加该方法时,这>个方法的返回值必须是字符串!)
如果类中添加了__.repr.__方法,打印类的对象的时候会自动调用这个方法,并且将这个方法对应>返回作为打印结果进行打印。

print('__init__----------------------------------------')
class A:def __init__(self):print('init方法已被自动调用')a1 = A()
a2 = A()
print('\n')print('__repr__----------------------------------------')
class B:def __init__(self, m, n):print(f'm:{m}, n:{n}')def __repr__(self):return f'<B的对象在{hex(id(self))}>'  # hex将10进制转换成16进制b1 = B(10, 20)
b2 = B(100, 200)print(b1)
print('\n')

例1:__init__与__repr__配合使用举例

print('__init__与__repr__配合使用举例----------------------------------------')
class Student:def __init__(self, name, age=18, gender='男'):self.name = nameself.age = ageself.gender = gender# 如果对本来的打印结果不满意的情况下就使用__repr__来重构打印结果def __repr__(self):return f'姓名:{self.name}, 年龄:{self.age}, 性别:{self.gender}'stu1 = Student('小明')
stu2 = Student('小花', 17, '女')
print(stu1)
print(stu2)

05 类的属性

属性 - 定义在类中的变量
类中的属性分为:类属性、对象属性

1)类属性
a.怎么定义:直接在类中定义的变量就是类属性
b.怎么使用:以’类名.xxx’的方式使用
c.什么时候使用:如果属性值不会因为对象不同而不一样,就定义成类属性

2)对象属性
a.怎么定义:以’self.属性名 = 属性名’的形式定义在__init__方法中
b.怎么使用:以’对象.xxx’的方式使用
c.什么时候使用:属性值会因为对象不同而不一样,就定义成对象属性

class A:n = 10         # 这里的a就是类属性name = '张三'   # 这里的name也是类属性# 定义对象属性,这里x和m是对象属性def __init__(self):self.x = 11self.m = 'hello'

例1:通过类使用类属性

print('例1:通过类使用类属性----------------------------------------')
print(A.n)
print(A.name)
print('\n')

例2:通过对象使用对象属性

print('例2:通过对象使用对象属性----------------------------------------')
a1 = A()
print(a1.x)
print(a1.m)
print('\n')

例3:定义一个圆来举例什么时候用类属性,什么时候用对象属性

print('例3:定义一个圆来举例什么时候用类属性,什么时候用对象属性--------------')
class Circle:# 此时圆周率(π)就是类属性pi = 3.1415926def __init__(self, r=0):self.r = r   # 此时每个圆的半径(r)就是对象属性# 如果对象方法中需要用到对象属性,由self来提供def area_count(self):return Circle.pi * self.rc1 = Circle(15)
print(c1.area_count())
print('\n')

例4:用狗举例

print('例4:用狗举例--------------------------------------------------')
class Dog:def __init__(self, name, age=3, gender='公狗', breed='品种未定义'):self.name = nameself.age = ageself.gender = genderself.breed = breeddef __repr__(self):return f'狗名:{self.name}, 狗年龄:{self.age}, 狗性别:{self.gender}, 狗品种:{self.breed}'# dog1 = Dog()
# dog1.name = '小黑'
#
# dog2 =Dog()
# dog2.name = '土豆'dog1 = Dog('小黑')
dog2 = Dog('土豆', 5, '母狗', '泰迪犬')print(dog1)
print(dog2)

06 类的继承

1.什么是继承?

继承:让子类直接拥有父类的属性和方法

父类 - 被继承的类
子类 - 继承者

2.子类继承语法

语法:
class 类名(父类1, 父亲2, 父亲3, …):
类的说明文档
类的类容

注意:如果定义类的时候()中没有写父类,那么这个类会默认继承 object(基类)
子类调用方法的时候先看自己有没有该方法,若自己没有该方法就往父类里去找该方法,若>父类里也没有该方法,则往基类object中去找。

class A:m = 100def __init__(self):self.n = 200def func1(self):print('对象方法')@classmethoddef func2(cls):print('类方法')@staticmethoddef func3():print('静态方法')class B(A):# 添加子类的类属性x = 'hello'# 添加子类的对象def __init__(self):super().__init__()   # ★调用当前类的父类的__init__# super(B, self).__init__()self.p = 1000def func4(self):print('子类里的对象方法4')@classmethoddef func5(cls):print('子类里的类方法5')@staticmethoddef func6():print('子类里的静态方法6')b1 = B()# 使用A类中的类容
print('使用A类中的类容----------------------------------------')
print(B.m)
print(b1.n)
b1.func1()
B.func2()
B.func3()
print('\n')# 使用B类(子类)中的类容
print('使用B类(子类)中的类容----------------------------------------')
print(B.x)
b1.func4()
b1.func5()
b1.func6()
print('------------------')
print(b1.p)

07 面向对象作业

  1. 定义一个矩形类,拥有属性:长、宽 拥有方法:求周长、求面积
class Rectangle:def __init__(self, length=0, width=0):self.length = lengthself.width = widthdef girth(self):return (self.width + self.length) * 2def area(self):return self.width * self.lengthdef __repr__(self):return f'该矩形的周长:{self.girth()}cm, 面积:{self.area()}c㎡'r1 = Rectangle(10, 20)
print(r1)
print('----------------------------------------')
  1. 定义一个二维点类,拥有属性:x坐标、y坐标 拥有方法:求当前点到另外一个点的距离
class Point:def __init__(self, x=0, y=0):self.x = xself.y = ydef distance(self, anotherpoint):return ((self.x - anotherpoint.x) ** 2 + (self.y - anotherpoint.y) ** 2) ** (1 / 2)d1 = Point(0, 0)
d2 = Point(0, 40)
print(f'A坐标到B坐标的距离:', d1.distance(d2))
print('----------------------------------------')
  1. 定义一个圆类,拥有属性:半径、圆心 拥有方法:求圆的周长和面积、判断当前圆和另一个圆是否外切
class Circle(Point):pi = 3.1415926def __init__(self, r=0, circleCenter=Point()):super(Circle, self).__init__()self.r = rself.circleCenter = circleCenterdef girth_circle(self):return f'圆1的周长:{2 * self.pi * self.r}'def area_circle(self):return f'圆1的面积:{self.pi * (self.r ** 2)}'def circumscribed(self, anothercircle):if self.circleCenter.distance(anothercircle.circleCenter) == self.r + anothercircle.r:return '圆1与圆2外切'else:return '圆1与圆2没有外切'c1 = Circle(10, Point(0, 0))
c2 = Circle(10, Point(0, 20))
print(c1.girth_circle())
print(c1.area_circle())
print(c1.circumscribed(c2))
print('----------------------------------------')
  1. 定义一个线段类,拥有属性:起点和终点, 拥有方法:获取线段的长度
class Line(Point):def __init__(self,  startpoint=Point(), endpoint=Point()):super(Line, self).__init__()self.startpoint = startpointself.endpoint = endpointdef length(self):length = self.startpoint.distance(self.endpoint)return lengthdef __repr__(self):return f'起点{self.startpoint.x, self.startpoint.y}到终点{self.endpoint.x, self.endpoint.y}间的距离为:{self.length()}'l1 = Line(Point(1, 1), Point(6, 6))
print(l1)

Pyf20230324(Python类和对象)相关推荐

  1. python类包含对象的个数_python类与对象各个算数运算魔法方法总结

    1.python类与对象各个算术运算魔法方法总结: 2.各个魔法方法应用举例: 3.实例训练: (1)我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常 ...

  2. Python类与对象实验

    一.任务描述   本实验任务主要对Python类与对象进行一些基本操作,通过完成本实验任务,要求学生熟练掌握Python类与对象的关系,并对Python类与对象的基本操作进行整理并填写工作任务报告. ...

  3. 【Python基础入门系列】第10天:Python 类与对象

    首先,我已经假定你是个萌新或已经看了无数遍的垃圾文章,然后依然搞不懂类和对象,但是呢起码知道有类和对象这么两个玩意儿,我觉得有必要找一篇生动形象的示例来讲解. 由于你可能没有编程经验, 所以无法从学过 ...

  4. 一文讲全了Python 类和对象内容

    摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan  . Pytho ...

  5. python类和对象_Python类和对象

    python类和对象 Python is an object-oriented programming language. Python Classes and Objects are the cor ...

  6. python中对象的特性_python中类与对象之继承,python类和对象理解,面对对象的三大特性之...

    python中类与对象之继承,python类和对象理解,面对对象的三大特性之 面对对象的三大特性之继承 1.什么是继承? 在程序中,继承指的是class与class之间的关系 继承是一种关系,必须存在 ...

  7. python类、对象、方法、属性之类与对象笔记

    为什么80%的码农都做不了架构师?>>>    python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... ...

  8. python——类和对象之__dict__属性的使用

    在 Python 类的内部,无论是类属性还是实例属性,都是以字典的形式进行存储的,其中属性名作为键,属性值作为对应的值. __dict__,可以使用类名或者类的实例对象来调用, 用类名直接调用__di ...

  9. python类和对象介绍_python中的类,对象,方法,属性等介绍

    注:这篇文章写得很好.加底纹的是我自己的理解 python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... 我们通过描述属性( ...

最新文章

  1. 2021年大数据Kafka(一):❤️消息队列和Kafka的基本介绍❤️
  2. log4j2配置实例[按小时记录日志文件]
  3. Win2008远程多用户登陆的配置方法
  4. 操作系统是计算机软件的核心 它直接监管,华工 网络 操作系统课后作业
  5. linux 压缩 解压zip 命令
  6. 树莓派 安装中文字体、中文输入法fcitx和googlepinyin输入法
  7. matlab 写excel 慢_吐槽一下MATLAB的workspace
  8. Powershell配置SharePoint环境
  9. 《研发企业管理——思想、方法、流程和工具》——1.7 企业研发管理的目的
  10. TCP/IP详解卷1 - wireshark抓包分析
  11. java将乱码转换成中文_转:java中文乱码的解决
  12. junit5 入门系列教程-14-junit5 重复测试(@RepeatedTest)
  13. Excel 动态透视表
  14. 佟年计算机大赛,佟年成电竞高手,老韩带老婆打比赛,solo内网被佟年轻松攻破...
  15. 2020-06-16
  16. atitit 音频 项目 系列功能表 音乐 v3 t67.docx Atitit 音频 项目 系列功能表 1.音频 音乐 语言领域的功能表 听歌识曲功能 酷我功能。 铃声 功能。。 音频切割(按
  17. 打乱魔方软件_魔方 打乱步骤生成 算法
  18. 弧齿锥齿轮零件图_弧齿锥齿轮画法类别
  19. linux删除slave网卡,Linux bonding网卡与其slave共同使用
  20. 亚马逊云科技蝉联中国数据管理解决方案领导者

热门文章

  1. 屏幕会摧毁孩子?无稽之谈!
  2. 一篇认真的正则入门文章:正则表达式数字和数字范围匹配表达
  3. 如何在 Linux 上使用 pmap 命令
  4. 小米手环4解锁Windows10
  5. 儿童学各种兴趣班的最佳年龄
  6. ready等方法 微信小程序_微信小程序设置图片固定比例
  7. MySQL退出命令行
  8. uboot中环境变量的加载、写入过程详解
  9. 4月4号服务器维护什么时候结束,绝地求生维护更新到什么时候结束 4月28日正式服维护公告一览...
  10. Java起名规则与建议