您的位置:首页 > 编程语言 > Python开发

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)的特点

  1. 封装
    即数据隐藏,直接调用方法即可使用(会用手机,但不知道手机的原理)
import datetime

now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print(now)

比如像这里的datetime库,我们引用了然后直接用了其中的方法,并不知道其实现手段。类的封装也一样,对于实例了的对象,直接调用其中的方法、访问属性即可(’%Y-%m-%d %H:%M:%S’是时间输出的格式)。

输出

  1. 继承
    子类共享父类的数据(好比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)

输出

  1. 多态
    即同一方法的不同实现(比如同样是学习,你选择了看博客,他选择了看视频,而看选择了看视频)
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)

输出

  • 点赞
  • 收藏
  • 分享
  • 文章举报
learner_pu 发布了18 篇原创文章 · 获赞 0 · 访问量 135 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: