初始Python面向对象概念(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39591494/article/details/82429636

Python之面向对象

一切万物皆为对象!

一、特殊方法

  • __init__: 指的是把各种属性绑定到self, self呢 就是代表着实例本身。
  • __slots__: 限制实例的动态属性,减少内存消耗,tuple类型
  • __str__: 对象的说明文字
  • __eq__: 比较对象是不是相等的。
  • classmethod 与 staticmethod : classmethod会把类本身作为第一个参数传入进去
#!/usr/bin/env python
# -*- coding:utf-8 -*-

class Computer:
    def __init__(self, name, mem, cpu):
        self._name = name
        self.mem = mem
        self.cpu = cpu

    def play(self, game="qq游戏"):
        print(f"玩er{game}")

PC1 = Computer("联想笔记本","16G","8核")
print(PC1.mem)
print(PC1.cpu)
>>>16G
>>>8核

上边定义了一个简单的一个电脑类,电脑有cpu 内存 硬盘等等,在这里我写了name名字 mem内存 cpu

1.1、在PC1对象中添加一个动态属性如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

class Computer:
    def __init__(self, name, mem, cpu):
        self._name = name
        self.mem = mem
        self.cpu = cpu

    def play(self, game="qq游戏"):
        print(f"玩er{game}")

    @property
    def name(self):
        return self._name

PC1 = Computer("联想笔记本","16G","8核")
print(PC1.mem)
print(PC1.cpu)
PC1.disk = "SSD"
print(PC1.disk)
######输出结果
16G
8核
SSD

在以上的例子中我们可以在PC1实例中添加动态属性。假设有很多个实例,每一个实例都添加动态属性,这时候会在内存开一块新的空间造成资源的浪费,所以我们使用__slots__: 限制实例的动态属性,减少内存消耗,tuple类型 如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

class Computer:
    __slots__ = ("_name","mem","cpu")
    def __init__(self, name, mem, cpu):
        self._name = name
        self.mem = mem
        self.cpu = cpu

    def play(self, game="qq游戏"):
        print(f"玩er{game}")

    @property
    def name(self):
        return self._name

PC1 = Computer("联想笔记本","16G","8核")
print(PC1.mem)
print(PC1.cpu)
PC1.video = "QiCaiHong"
print(PC1.video)
>>>    PC1.video = "QiCaiHong"
AttributeError: 'Computer' object has no attribute 'video'

以上实例中,添加了slots 限制了动态属性的添加,AttributeError: 'Computer' object has no attribute 'video'

1.2、使用__str__:对象的说明文字

class Computer:
    __slots__ = ("_name","mem","cpu")
    def __init__(self, name, mem, cpu):
        self._name = name
        self.mem = mem
        self.cpu = cpu

    def play(self, game="qq游戏"):
        print(f"玩er{game}")

    @property
    def name(self):
        return self._name

PC1 = Computer("联想笔记本","16G","8核")
print(PC1)
>>><__main__.Computer object at 0x0000000002200288>

实例:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

class Computer:
    __slots__ = ("_name","mem","cpu")
    def __init__(self, name, mem, cpu):
        self._name = name
        self.mem = mem
        self.cpu = cpu

    def play(self, game="qq游戏"):
        print(f"玩er{game}")

    @property
    def name(self):
        return self._name
    def __str__(self):
        return f"{self._name}-{self.mem}-{self.cpu}"

PC1 = Computer("联想笔记本","16G","8核")
print(PC1)
>>>联想笔记本-16G-8核

1.3、__eq__:比较对象是不是相等的。

#!/usr/bin/env python
# -*- coding:utf-8 -*-

class Computer:
    __slots__ = ("_name","mem","cpu")
    def __init__(self, name, mem, cpu):
        self._name = name
        self.mem = mem
        self.cpu = cpu

    def play(self, game="qq游戏"):
        print(f"玩er{game}")

    @property
    def name(self):
        return self._name
    def __str__(self):
        return f"{self._name}-{self.mem}-{self.cpu}"

    def __eq__(self, other):
        return self.cpu == other.cpu

PC1 = Computer("联想笔记本","16G","8核")
PC2 = Computer("小米笔记本","100G","8核")
if PC1 == PC2:
    print("yes PC1 == PC2")
else:
    raise TypeError("PC1 不等于 PC2")
>>>yes PC1 == PC2
不相等如下:
TypeError: PC1 不等于 PC2

classmethod及staticmethod:https://www.cnblogs.com/wangyongsong/p/6750454.html

猜你喜欢

转载自blog.csdn.net/qq_39591494/article/details/82429636
今日推荐