返回顶部
首页 > 资讯 > 后端开发 > Python >python学习 day017打卡 类与
  • 253
分享到

python学习 day017打卡 类与

python 2023-01-30 22:01:16 253人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

本节主要的内容: 1.依赖关系 2.关联关系,组合关系,聚合关系 3.继承关系,self到底是什么? 4.类中的特殊成员   一.类与类之间的依赖关系 在面向对象的世界中,类与类中存在以下关系: 1.依赖关系 2.关联关系 3.组合关系

本节主要的内容:

1.依赖关系

2.关联关系,组合关系,聚合关系

3.继承关系,self到底是什么?

4.类中的特殊成员

 

一.类与类之间的依赖关系

面向对象的世界中,类与类中存在以下关系:

1.依赖关系

2.关联关系

3.组合关系

4.聚合关系

5.继承关系

6.实现关系

由于python是一门弱类型编程语言,并且所有的对象之间其实都是多态关系,也就是说,所有的东西都可以当做对象来使用.

所以我们在写代码的时候很容易形成以上关系.首先我们先看第一种,也就是这些关系中紧密程度最低的一个,依赖关系.

class DaXiang:
    def open(self, bx): #  这里是依赖关系. 想执行这个动作. 必须传递一个bx
        print("大象高高兴兴走到了冰箱的面向前")
        bx.kai() # 传递来的对象执行kai()动作
        print("大象成功的打开了冰箱门")

    def zhuang(self):
        print("自己走进了冰箱")

    def close(self, bx):
        print("大象要关冰箱门了")
        bx.guan()


class BingXiang:
    def kai(self):
        print("我是冰箱. 我会开门 ")
    def guan(self):
        print("我是冰箱. 我会关门 ")


bx1 = BingXiang()
dx = DaXiang()

dx.open(bx1)
dx.zhuang()
dx.close(bx1)

 

依赖关系其实就是在方法中给方法的参数传递一个对象,此时类与类之间的关系就是依赖关系,但是关系是最轻的

二.关联关系,组合关系,聚合关系

这三种关系在代码上写法是一样的,但是,从含义上是不一样的.

1.关联关系:两种事物必须是互相关联的,但是在某些特殊情况下是可以更改和更换的.

2.聚合关系:属于关联关系中的一种特例,侧重点事xxx和xxx聚合成xxx.各自有各自的声明周期.比如电脑:电脑里有CPU,

硬盘,内存等等.电脑坏了,CPU还是好的,还是完整的个体

3.组合关系.属于关联关系中的一种特例.写法上差不多,组合关系比聚合关系还要紧密,比如人的大脑,心脏,各个器官,这些

器官组合成一个人.这时,这个人和他的器官是共同存在,共同消亡的.

 

关联关系:

ass Boy:
    def __init__(self, name, girlFriend = None):
        self.name = name
        self.girlFriend = girlFriend # 关联关系

    def chi(self): # b
        if self.girlFriend:
            self.girlFriend.happy()
            print("%s和%s在吃饭"  %  (self.name, self.girlFriend.name))
        else:
            print("没女朋友吃什么吃")

class Girl:
    def __init__(self, name):
        self.name = name

    def happy(self):
        print("有好吃的就开心")


b = Boy("王明")
g = Girl("肉丝")
# b对象的girlFriend赋值  g

b.girlFriend = g # 突然天降女朋友
b.chi()
b.girlFriend = None
b.c

 

关联关系其实就是把另个类的对象作为这个类的对象作为这个类的属性来传递和保存.

 

组合关系和聚合关系,其实代码上的差别不大,都是把另一个类的对象作为这个类的属性来传递和保存.只是含义上会有些许的不同而已.

 

三.继承关系

在面向对象的世界中存在着继承关系.我们现实中也存在着这样的关系.我们说过.x是一种y.这时理解层面上的.如果上升到代码层面.我们

可以这样认为.子类在不影响父类的程序运行的基础上对父类进行的扩充和扩展.这里我们可以把父类称为超类或者基类.子类被称为派生类.

 

类名和对象默认是可以作为字典的key,即可哈希的

class Foo:
     def __init__(self):
        pass
     def method(self):
        pass
    # 该类的对象就不可哈希了
    #  __hash__ = None


print(hash(Foo)) # 类和对象默认都是可哈希的
print(hash(Foo())) # unhashable type: 'Foo'

 

当在类中加入__hash__=None,对象就是不可哈希的了

 

接下来继续讲继承上的相关内容.

记住:不管方法之间如何进行调用,类与类之间是如何关系,默认的self都是访问这个方法的对象

class Base:
    def __init__(self, num):
        self.num = num

    def func1(self):
        print(self.num)
        self.func2()

    def func2(self):
        print(111, self.num)

class Foo(Base):
    def func2(self):
        print(222, self.num)

lst = [Base(1), Base(2), Foo(3)]
for obj in lst:
    obj.func2()
# 结果
# 111 1
# 111 2
# 222 3

 

 

 

总结:self在访问方法的顺序:永远是先找自己的.自己的找不到再找父类的.

结论:self就是你访问的那个对象.先找自己,然后在找父类的.

 

四.类中的特殊成员

特殊成员:类中方法名左右两边带双下划线的成员

1.类名()  会自动执行__init__()

2.对象()会自动执行__call__()

3.对象[key] 会自动执行__getitem__()

4.对象[key] = value 会自动 __setitem__()

5.del 对象[key] 会自动执行 __delitem__()

6.对象+对象 会自动执行 __add__()

7.with 对象 as 变量 :  进去的时候会自动执行__enter__()

出来的时候会执行__exit__()

8.打印对象的时候 会自动执行__str__()

9.干掉可哈希 __hash__ == None 对象就不可哈希了.

....

class Car:
    def __init__(self, color, pai):
        self.color = color
        self.pai = pai
    def __call__(self, *args, **kwargs):
        print("这里是call")

    def __getitem__(self, item):
        print("这里是getitem, item=", item)

    def __setitem__(self, key, value):
        print(key, value)

    def __delitem__(self, key):
        print(key)

    def __add__(self, other): # 在执行两个对象相加的时候自动调用
        print("证明我来过")
    def __enter__(self):
        print("进来的时候")
    def __exit__(self, exc_type, exc_val, exc_tb):
        print("这里是出去")

    def __str__(self): # 当前对象的字符串表示形式
        return "我的车很厉害"

    def __repr__(self):  #  一个对象的官方字符串表示形式
        return "我的车非常非常厉害"

    def __iter__(self):
        return (i for i in range(10))

    # def __hash__(self):
    #     return hash(self.pai) + hash(self.color)
    __hash__ = None


c = Car("红", "1.5T") # 在创建对象的时候会自动的调用__init__()  类名()  ==> init()
# c() # 对象()  => __call__()
# c["马化腾"] # 对象[任意参数] => __getitem__(item)
# c["胡辣汤"] = "河南开封"
# del c['上海小混沌大碗']

# c2 = Car("黑色", "1.8T")
# cc = c+c2

# with c as m: # 装饰器
#     print("哈哈哈")
#
# print("呵呵呵")
# print(c) # 当打印一个对象的时候. 默认的去执行__str__ 根据__str__返回的结果进行打印
# print(repr(c))

print("%s" % c) # %s __str__
print("%r" % c) # %r __repr__

# c > c2 # great than
# c< c2  # less than
# c >= c2 # greate and equals

for s in c:
    print(s)

 

 

创建对象的真正步骤:

首先,在执行类名()的时候.系统会自动先执行__new__()来开辟内存.此时新开辟出来的内存区域是空的.

紧随其后,系统自动调动__init__() 来完成对象的初始化工作.按照时间轴来算.

 

1.加载类

2.开辟内存(__new__)

3.初识化(__init__)

4.使用对象干xxx

class Car:
    def __init__(self, color, pai): # 初始化方法
        print("哪有地呀")
        self.color = color
        self.pai = pai

    # 这里才是真正的构造方法
    def __new__(cls, *args, **kwargs):
        print("我的天哪")
        # 固定的返回值
        return object.__new__(cls)

c = Car("红色", "京A66666") # 先执行__new__ 返回object.__new__(cls).把返回的空对象传递给 __init__()

print(c.color)

--结束END--

本文标题: python学习 day017打卡 类与

本文链接: https://lsjlt.com/news/180138.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python学习 day017打卡 类与
    本节主要的内容: 1.依赖关系 2.关联关系,组合关系,聚合关系 3.继承关系,self到底是什么 4.类中的特殊成员   一.类与类之间的依赖关系 在面向对象的世界中,类与类中存在以下关系: 1.依赖关系 2.关联关系 3.组合关系 4...
    99+
    2023-01-30
    python
  • Python学习 day01打卡
    1.Python : 是一门解释型 弱类型 高级开发编程语言. 2.第一个Python程序的编写: print ("hell,world") 3.变量:把程序运行过程中的值储存起来,方便后面的程序调用. 4.变量的命名要求: 1,只能是数...
    99+
    2023-01-30
    Python
  • python学习 day018打卡 反射
    本节主要内容: 1.isinstance,type,issubclass 2.区分函数和方法 3.反射(重点)   一.isinstance,type,issubclass issubclass():判断xxx类是否是yyy类型的子类 ...
    99+
    2023-01-30
    反射 python
  • Python学习之类
    前言:之前写的博客,都是借鉴别的博文或者是环境的配置,没有自己的东西,掌握的很少。以后的博文,我都会尽力加上一些自己的东西。现在开始进入我的python世界吧!为什么要有类:在面向对象编程中,你要通过类来创建对象。通过类你可以对对象进行定义...
    99+
    2023-01-31
    Python
  • 学习python类方法与对象方法
    本文实例针对python的类方法与对象方法进行学习研究,具体内容如下 class Test_Demo: TEST = 'test_value' def __init__(self,name,a...
    99+
    2022-06-04
    方法 对象 python
  • python学习-python与rrdt
      rrdtool(round robin database)工具为环状数据库的存储格式,round robin是一种处理定量数据以及当前元素指针的技术。rrdtool主要用来跟踪对象的变化情况,生成这些变化的走势图,比如业务的访问流量、系...
    99+
    2023-01-31
    python rrdt
  • python学习之数据类型与运算符号
    python版本:3.6    python编辑器:pycharm 最新版本 整理成代码如下: #!/usr/bin/env python #-*- coding: utf-8 -*- # 数学操作符 print(2 ** 3) ...
    99+
    2023-01-30
    数据类型 符号 python
  • python学习之变量类型
    变量:  变量是保存在内存中的值,根据变量类型开辟不同的内存空间且只允许符合该数据类型的数据才可以被存储在该内存空间中变量赋值:在Python中定义变量时,无需像其他语言一样需要声明数据类型。每个变量在内存中创建的时候都会包含变量的标识、名...
    99+
    2023-01-30
    变量 类型 python
  • python学习系列--str类型
    str的内置方法。__contains__()        判断字符串中是否包含某特定字符。等同于'in'关键字。__format__()           字符串格式化。capitalize()             首字母大写。c...
    99+
    2023-01-31
    类型 系列 python
  • 一篇文章带你学习python的函数与类
    目录函数模块类根据类创建实例继承总结现在做的一个小项目需要用到python的相关知识,但是因为太久没用一些东西都忘掉了,因此在本篇博客中记录一下python的函数和类的基础知识,下次...
    99+
    2024-04-02
  • Python学习之装饰器与类的装饰器详解
    目录装饰器装饰器的定义装饰器的用法类中的装饰器类的装饰器 - classmethod类的装饰器 - staticmethod类的装饰器 - property通过学习装饰器可以让我们更...
    99+
    2024-04-02
  • Python 类与对象学习指南:从基础到实践
    一、类与对象的基础知识 类:类是对象的模板,描述了对象的属性和方法。 对象:对象是类的实例,具有类所描述的属性和方法。 实例化:创建对象的过程称为实例化。 二、类的定义与使用 类定义:使用 class 关键字来定义类...
    99+
    2024-02-22
    Python 对象 实例 方法 属性 继承 封装 多态
  • Python学习:for 循环 与 ra
    for 循环   For … in 语句是另一种循环语句,其特点是会在一系列对象上进行迭代(Iterates),即它会遍历序列中的每一个项目 注意:  1、else 部分是可选的。当循环中包含它时,它循环中包含它时,它总会在 for ...
    99+
    2023-01-30
    Python ra
  • Python学习:If 语句与 Whil
    If 语句   用以检查条件:如果条件为真(True),将运行这一块的语句(称作 if-block 或 if 块)           则将运行另一块语句(称作 else-block 或 else 块),其中 else 从句是可选的   ...
    99+
    2023-01-30
    语句 Python Whil
  • Python学习—元组与集合
    1.元组(tuple) Python 的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。 1.元组定义 (1).定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,并且以后不可更改其值。 &...
    99+
    2023-01-31
    Python
  • python-字典与列表学习
    #字典练习 def print_dict(): contect_file = 'contect_list.txt' f = file(contect_file) #读取 contect_dic = {} ...
    99+
    2023-01-31
    字典 列表 python
  • Python数据类型学习笔记
    带你走进数据类型 一:整数、浮点数 Python中整数和浮点数的定义以及运算和C++都是一样的,我在这里就不需多说了,我就说明一点:Python相对于C/C++而言,定义整数没有int 和 long lon...
    99+
    2022-06-04
    数据类型 学习笔记 Python
  • python 自定义异常类学习
    #自定义异常类 class MyException(Exception): pass def exextp_01(): try: #come code here list = ['java...
    99+
    2023-01-31
    自定义 异常 python
  • Python学习笔记-打包发布Pytho
    Python模块、扩展和应用程序可以按以下几种形式进行打包和发布: python setup.py获取帮助的方式    python setup.py --help    python setup.py --help-commands 所有...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Redis list 类型学习笔记与总结
    redis 版本 [root@localhost ~]# redis-server --version Redis server v=2.8.19 sha=00000000:0 malloc=jema...
    99+
    2022-06-04
    学习笔记 类型 Redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作