python面向对象
2020-03-06 16:37
996 查看
今天是我写博客的第一天,这也是我的第一个博客,目的是给自己的学习多一点输出,毕竟最好的学习是输出,也给自己留下复习资料吧。
首先我们知道对象 = 属性 + 方法,属性即变量,方法即函数,属性可理解为组成的部分,方法即动作,用下面的代码来解释,一个人有身高、体重等各种属性,也有跑、跳等等的动作,即他的方法,这两大部分构成了一个人,用来描述这个人。
类对象
class Man(): # 属性 weight = 126 color = yellow legs = 2 # 方法 def walk(self): print("我走") def jump(self): print("我跳") def play(self): print("我打") def hide(self): print("我躲")
特别注意:类名首字母大写(约定俗成)。
实例对象
man = Man()
很简单,调用类创建的实例对象,赋给man
这个时候,使用类里的方法,“.”即可
print(man.weight) man.jump() man.play()
输出
面向对象(Object-oriented)的特点
- 封装
即数据隐藏,直接调用方法即可使用(会用手机,但不知道手机的原理)
import datetime now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') print(now)
比如像这里的datetime库,我们引用了然后直接用了其中的方法,并不知道其实现手段。类的封装也一样,对于实例了的对象,直接调用其中的方法、访问属性即可(’%Y-%m-%d %H:%M:%S’是时间输出的格式)。
输出
- 继承
子类共享父类的数据(好比DNA继承)
class Son(Man): weight = 100 print(Son.weight) son = Son() son.jump() son.play()
输出
继承改初始方法
class Man(): def __init__(self): self.name = "hi" class Son(Man): def __init__(self): # Man.__init__(self) 第一种方法 super().__init__() # 第二种方法,推荐 self.height = 170 son = Son() print(son.name)
多重继承
class Son(Man, wonan):
类中类
class Man(): def __init__(self, num): self.num = num class Woman(): def __init__(self, num): self.num = num class People(): def __init__(self, num1, num2): self.man = Man(3) self.woman = Woman(3)
类对象和实例对象,类对象变实例对象变,实例对象变,类对象不变
class Man(): num = 0 Man.num += 5 a = Man() b = Man() print(a.num) a.num += 1 print(Man.num)
输出
- 多态
即同一方法的不同实现(比如同样是学习,你选择了看博客,他选择了看视频,而看选择了看视频)
class A(): def study(self): print("我看视频") class B(): def study(self): print("我看书") class C(A): def study(self): print("我看博客") a = A() b = B() c = C() a.study() b.study() c.study()
输出
同样是学习,但实现的方法不同,C虽然继承了A,但对其中的一个方法做了修改,如上代码中对儿子的体重做了修改,其他不变。
问题
- self是什么?
self即自己,代表这个类可以用self来调用其中的属性和方法,如下代码,有两个name,哪一个是Man里的name,哪一个是传进来的参数呢?用上self以后,就知道self.name是类里的属性了。
注意:self是实例化对象的自己
class Man(): # 属性 name = '' # 方法 def set_name(self, name): self.name = name man = Man()man.set_name('李华') print(man.name)
输出
- import的库是什么?
import的库就是人家写的.py文件 - init?
相当于构造函数,即初始化的时候自动调用的函数,
class Man(): # 属性 name = '' # 方法 def __init__(self, name): self.name = name man = Man('李华') print(man.name)
输出同上,自动调用__init__方法,并且创造出了对象,即一个初始化的功能
注意:__init__不能有任何返回值(只能返回None)
*str()能对输出函数进行重构
- 算数符号重构建(这里的int同样是一个类)
class int(int): def __add__(self, other): return int.__sub__(self, other) a = int('5') b = int('3') print(a + b)
输出
- 反运算(即对于a + b而言,a为主动,b为被动为正运算,b为主动为反运算,反运算方法前多一个r)
class Nint(int): def __radd__(self, other): return int.__sub__(self, other) a = Nint('3') print(1 + a)
输出
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Python面向对象中的“私有化”
- python 自动化之路 day 07 面向对象基础
- python 面向对象
- Python自动化之面向对象进阶
- python2.7学习笔记(10) ——面向对象高级编程
- python面向对象基础
- day26学习整理-Python面向对象
- 详解python django面向关系数据库的ORM对象映射系统(1)
- Python 面向对象介绍
- python(三):面向对象实现之打飞机游戏
- python之路 面向对象基础 XML
- 笔记:python基础之面向对象特性——封装
- 面向对象高级编程——Python学习笔记08
- Python 基础08 面向对象
- python面向对象进阶
- python面向对象基本知识
- Python之面向对象
- Python进阶三:面向对象基础
- python 面向对象简单实现
- Python-面向对象进阶