首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >类实例化和抽象/静态类的变量共享。

类实例化和抽象/静态类的变量共享。
EN

Stack Overflow用户
提问于 2022-03-17 08:25:25
回答 1查看 55关注 0票数 1

我的问题的简单例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class AbstractService:
    subscribers = []

    @classmethod
    def subscribe(cls, service):
        service.subscribers.append(cls)

    @classmethod
    @abstractmethod
    def notify(cls, payload):
        raise NotImplementedError(f"{cls.__name__} not implemented notify()")


class ServiceA(AbstractService):

    @classmethod
    def notify(cls, payload):
        pass


class ServiceB(AbstractService):

    @classmethod
    def notify(cls, payload):
        pass


ServiceB.subscribe(ServiceA)

ServiceA.notify({'message': 'hello'})

问题是,这个实例中的所有服务都将共享订阅服务器,因此,我的解决方案是创建一个函数,以返回抽象服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def get_abstract_service():
        
    class AbstractService:
        subscribers = []
    
        @classmethod
        def subscribe(cls, service):
            service.subscribers.append(cls)
    
        @classmethod
        @abstractmethod
        def notify(cls, payload):
            raise NotImplementedError(f"{cls.__name__} not implemented notify()")

    return AbstractService
class ServiceA(get_abstract_service()):

    @classmethod
    def notify(cls, payload):
        pass


class ServiceB(get_abstract_service()):

    @classmethod
    def notify(cls, payload):
        pass


ServiceB.subscribe(ServiceA)

ServiceA.notify({'message': 'hello'})

这现在起作用了,因为订阅服务器对于继承抽象服务的每个类都是唯一的。

发行

对于python,

  1. 是正确的吗?如果是这样的话,模式错误吗?在这种情况下,

的规范是什么?

如果我的解决方案是正确的(对于任何需要将该类型传递给

  • 的函数),如何处理AbstractService的输入?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-17 08:50:38

我会这样对待它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from __future__ import annotations


class AbstractService:
    subscribers: list[AbstractService]

    def __init_subclass__(cls, **kw):
        super().__init_subclass__(**kw)
        cls.subscribers = []

它在创建后在每个类上设置一个新的subscribers实例。

编辑:此外,这还可以通过使用from __future__ import annotations为您处理输入。

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class C:
    def f(self) -> C:
        ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71515835

复制
相关文章
Dart - 抽象类的实例化
Dart 抽象类可以只声明方法,也可以有具体的方法实现,但是不能直接用抽象类来创建实例,只能被继承使用或者充当接口。
LinXunFeng
2020/06/08
2.8K0
Dart - 抽象类的实例化
深入理解python类的实例变量和类变量
a = aa()     #将a投入aa这个类中,进行实例化# print a.add()   #这个结果显然易见# #下边两条指令各起何作用?结果是输出两个 20 么?还是两个13?还是? aa.w = 20   
py3study
2020/01/09
1.4K0
Java中静态变量(类变量)、实例变量、局部变量和成员变量
学习Java的过程中,一开始很容易被这些各种变量绕晕,这篇博客主要介绍了这几种变量之间的关系和区别。
用户8639654
2021/07/19
2.3K0
Python类变量和实例变量区别
类变量:定义在类里面,通过类名或对象名引用,如果是通过对象名引用,会先找有没有这个同名的实例变量,如果没有,引用到的才是类变量,类变量的更新,只能通过类名,形如 类名.a = 55 ,不要指望通过实例引用类变量来更新类变量
王大力测试进阶之路
2019/10/25
1.5K0
Python面向对象编程-类和对象-实例变量和类变量
实例变量是指属于特定对象的变量。每个类的实例都具有自己的实例变量,它们的值可以不同。在上面的示例中,Person 类的 name 和 age 属性都是实例变量,因为它们属于特定的 Person 对象。
玖叁叁
2023/04/19
8500
python 类属性和实例属性、类方法, 静态方法, 实例方法、接口, 协议和抽象基类 (4.2)
非正式的接口, 协议与继承没有关系, 一个类可能会实现多个接口, 从而让实例扮演多个角色
友儿
2022/09/28
6280
类的静态成员变量
类的静态成员要在类内声明,类外定义。这样做的原因参照 here类外定义时又要注意哪些内容呢?不在头文件中定义静态成员变量这是“尽量不在头文件中定义变量”(参考)的延伸。错误的代码示例class.h#ifndef __CLASS_H#define __CLASS_Hclass A{ static int var;};int A::var = 1;#endifmain.cppint main() { return 0;}test1.cpp#include "class.h"test2
村子里的设计师
2023/05/20
1K0
python类成员变量和实例成员变量
print 'need %f hour(s)'% (distance/self.speed)
用户7886150
2020/12/20
1.4K0
类方法,静态方法和实例方法
2.类名的规范是: 1 数字字母下划线组成 2 不能以数字开头 3 首字母大写,驼峰命名 (例如:TestResult)
清菡
2020/12/02
2.8K0
类方法,静态方法和实例方法
Java 抽象类能不能实例化
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
HoneyMoose
2023/09/10
1810
Java 抽象类能不能实例化
抽象类为什么不能被实例化?
首先,语法上,抽象类不能被实例化,这是语法规定。强制实例化一个抽象类的代码,编译器会报错。
用户6557940
2023/09/06
7210
抽象类为什么不能被实例化?
静态类、静态方法、静态变量的区别
一直疑惑静态类、静态方法、静态变量的内存驻用情况。今天就写了个Demo来深入八一八他们的区别和注意点。
西柚dzh
2022/06/09
1.6K0
静态类、静态方法、静态变量的区别
java中类变量和实例变量的实质区别
相对于static(静态的)或说类的, 本章开始提到的都是instance(实例的)或说对象的。 每个对象都有自己的一份儿对象域或实例域,相互之间没关系, 不共享。 我们可以从对象中访问实例变量。
马克java社区
2021/03/15
2K0
java中类变量和实例变量的实质区别
【说站】python类变量和实例变量的对比
1、类变量是所有对象共有的,其中一个对象改变其价值,其他对象得到的是改变后的结果。
很酷的站长
2022/11/23
8310
【说站】python类变量和实例变量的对比
C#简单工厂和抽象类的实例
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 模拟磁盘打开文件 { class Program { static void Main(string[] args) {
码农阿宇
2018/04/18
6290
Python实例方法、类方法和类方法静态方法浅析
Python 类方法和实例方法相似,它最少也要包含一个参数,只不过类方法中通常将其命名为 cls,Python 会自动将类本身绑定给 cls 参数(注意,绑定的不是类对象)。所以在调用类方法时,无需显式为 cls 参数传参。
Go进阶者
2021/04/29
2.5K0
Python实例方法、类方法和类方法静态方法浅析
【JavaSE专栏64】抽象类和接口,不能被实例化的类有什么用?
抽象类通过关键字 abstract 来声明,包含抽象方法和非抽象方法,抽象方法是只有声明而没有实现的方法,需要子类来实现,非抽象方法是有具体实现的方法,子类可以直接继承和使用。
Designer 小郑
2023/08/09
4660
【JavaSE专栏64】抽象类和接口,不能被实例化的类有什么用?
类、抽象类和接口的区别
接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。
chenchenchen
2023/01/30
4750
抽象类和抽象方法
  父类要体现所有子类的共同特征,在设计某些方法(行为特征或功能)时,我们发现父类中无法给出合理的具体实现,而应该交由子类来实现,那么这样的方法就应该设计为抽象方法,而包含抽象方法的类就必须为抽象类。
别团等shy哥发育
2023/02/25
5110
抽象类和抽象方法
点击加载更多

相似问题

使用变量类实例化抽象类

30

通过反射实例化静态抽象类

12

类实例化-变量的抽象类或具体类

51

抽象类和PyMongo;无法实例化抽象类

213

如何从抽象类的静态方法中实例化类

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文