前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 类属性和实例属性、类方法, 静态方法, 实例方法、接口, 协议和抽象基类 (4.2)

python 类属性和实例属性、类方法, 静态方法, 实例方法、接口, 协议和抽象基类 (4.2)

作者头像
友儿
发布2022-09-28 13:20:45
6180
发布2022-09-28 13:20:45
举报
文章被收录于专栏:友儿

类属性和实例属性

类属性

通过类对象可以直接访问的属性

抽象概念的固有属性, 要考虑当前抽象概念的普适性

代码语言:javascript
复制
# 贴标签不是一个特别好的抽象, 原因他没有一个普适性
class Developer:
    programing_language = None
    busy = True

私有属性

不希望外部更改, 只作用于类内部

通过__变量名来声明私有属性

代码语言:javascript
复制
class Lottery:
    __items = ["mac", "ipad", "iphone"]

通过类._类名__变量名来访问私有属性

代码语言:javascript
复制
print(Lottery._Lottery__items)

实例属性

绑定在实例上的属性, 只能通过该实例进行访问

实例的自有属性

代码语言:javascript
复制
class Developer:
    programing_language = None
    busy = True
    __case = "doing something"

d_python = Developer()
d_python.programing_language = "python"
d_java = Developer()
d_java.programing_language = "java"

print(d_java.programing_language)
print(d_python.programing_language)
  • 私有属性
    • 通过self.__变量名来声明私有属性
    • 通过实例._类名__变量名来访问私有属性

类方法, 静态方法, 实例方法

类方法

仅供类调用的方法

通过classmethod装饰器来声明一个类方法

自定义类创建

代码语言:javascript
复制
class Developer:
    programing_language = None
    busy = True
    __case = "doing something"
    def __init__(self, hairs):
        self.__hairs = hairs

    @classmethod
    def __new__(cls, *args, **kwargs):
        print("init class")
        return super().__new__(cls)

    @classmethod
    def get_case(cls):
        return cls.__case

静态方法

类可以直接调用的方法

通过staticmethod装饰器装饰

对一类抽象行为的归类

代码语言:javascript
复制
class MyMath:

    @staticmethod
    def add(a, b):
        return a + b

实例方法

  • 仅供实例调用的方法

接口, 协议和抽象基类

接口

对象公开方法的子集, 让对象在系统中扮演特定的角色.

代码语言:javascript
复制
list实现了增删改查的接口, 只要有一个接口没有实现那就不属于list
tuple只提供了查的接口

协议

非正式的接口, 协议与继承没有关系, 一个类可能会实现多个接口, 从而让实例扮演多个角色

代码语言:javascript
复制
list扮演者列表的角色, 但同时也是一个序列, 序列并不是一个实体类.

协议的应用

代码语言:javascript
复制
class MyDict(dict):
    def __iadd__(self, other):
        self.update(other)
        return self

    def __str__(self):
        return f"My Dict {self.items()}"

抽象基类

把客观事物封装成抽象的元类, 区分概念和实现.

只要有@abc.abstractmethod装饰器的类就是抽象基类

代码语言:javascript
复制
import abc
class Mixin:
    def sign(self):
        pass

    def rank(self):
        pass

class Gamer:
    @abc.abstractmethod
    def sign(self):
        pass


class GoGamer(Mixin, Gamer):
    pass

class Swimmer(Mixin, Gamer):
    pass
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 类属性和实例属性
  • 类方法, 静态方法, 实例方法
  • 接口, 协议和抽象基类
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档