前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python面向对象学习(一)

python面向对象学习(一)

作者头像
dogfei
发布2020-07-31 09:59:28
2880
发布2020-07-31 09:59:28
举报
文章被收录于专栏:devops探索devops探索

面向对象

三要素

1、封装

  • 组装:将数据和操作,或者是属性和方法组装到一起
  • 隐藏数据:对外只暴露一些接口,通过接口访问对象,比如驾驶员使用汽车,不需要了解汽车的构造细节,只需要知道使用什么部件怎么驾驶就行,踩了油门就能跑,可以不了解后面的原理

2、继承

  • 多复用,继承来的就不用自己写了
  • 多继承少修改,使用继承来改变,来体现个性

3、多态

  • 面向对象编程最灵活的地方,动态绑定

例如,人类就是封装,人类继承自动物类,孩子继承父母特征,分为单一继承,多继承;

多态,继承自动物类的人类,猫类的操作 吃 不同

类是创建实例的模板,实例是一个个的具体的对象,每一个实例都拥有各自的属性,而方法便是与实例绑定的函数,在函数中可以访问实例的数据

示例

创建一个类
代码语言:javascript
复制
class Student():   

    def __init__(self,name,age):
        self.n = name      #属性name
        self.a = age       #属性age

    def say_hello(self):   #其中的一个方法
        print("{}'s age is {}".format(self.n,self.a))

info = Student('Chen Fei',25) 
info.say_hello()

__init__(self)方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会自动调用该方法,而我们所指定的一些属性,例如name,age等都可以绑定到self,也就是实例本身,需要注意的是,当我在创建类的时候,如果写了__init__()时,在构建一个实例时,就必须传入对应的参数。

info就是Student的实例化,初始化。

那么self到底是什么呢?

代码语言:javascript
复制
class MyClass:
    """This is a class"""
    x = 123

    def foo(self):
        print(id(self))
        return self

w = MyClass()

print(w.x)
print(w.foo())
print(id(w))

结果:
123
4521763896
<__main__.MyClass object at 0x10d84a438>
4521763896

内存地址是一样的,由此可知:

self代表实例本身,指向的并不是类,而是指向的实例,这里相当于 w

一个简单的数据封装的示例

每一个实例都有自己的属性,那么该如何访问这些数据呢?

代码语言:javascript
复制
class People():

    def __init__(self,name,age):
        self.n = name
        self.a = age

    def what_age(self):
        print("{}'s age is {}".format(self.n,self.a))

    def what_people(self):
        if self.a <= 30:
            print("{} is teenager".format(self.n))
        elif self.a > 30:
            print("{} is old".format(self.n))
info = People('Chen Fei',35)
info.what_people()

访问控制

就是让内部设置的属性不被外部所能访问,也就是将变量设置成一个私有变量,方法是将变量改为以__双下划线开头的变量,例如: __gender

示例:

代码语言:javascript
复制
class Student():
    def __init__(self,name,gender):
        self.name = name
        self.__gender = gender

    def get_gender(self):
        return self.__gender

    def set_gender(self,gender):
        if isinstance(gender,str) and (gender == 'male' or gender == 'female'):
            self.__gender = gender
        else:
            raise ValueError('Error gender')


w = Student('Chen', 'male')
print(w.get_gender())
if w.get_gender() != 'male':
    print('faild-1')
else:
    w.set_gender('female')
    print(w.get_gender())
    if w.get_gender() != 'female':
        print('faild-2')
    else:
        print('success')

__gender这是一个私有变量,不能直接通过w.__gender来获取,但是我们可以定义一个方法来获取,也可以定一个方法来修改变量。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 面向对象
    • 三要素
      • 示例
        • 访问控制
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档