在Python 3.2或更高版本中是否有一种方法可以定义一个类,其子类应该使用特定的元类创建而不使用该元类创建类本身? 举例来说明我的意思:假设我想创建一个Enum类,其子类可用于定义枚举类型.枚举类型将具有固定数量的实例,每个实例具有不同的int(或其他)值.枚举类型将通过创建Enum的子类并将值分配给该类的属性来声明.通过Enum的元类,这些属性的值将被新类的实例替换. Enum类还可以定义一些可以在其子类或其实例上使用的类或实例方法...
我有一个类是标准dict的子类:class Result(dict):""" Dict-like object with special methods """def content(self):return self.__getitem__('_content')def attrs(self):return self.__getitem__('_attrs')此对象中的示例表示:{'_attrs': {'id': 1},'description': 'testtest','calories': 1234,'_content': 'Sample content','name': 'qwerty','price': 12390 }我希望我的类在迭代时跳过带有下划线键的记录.# data is Result(...
这是我在互联网上找到的一些代码.我不确定它是如何被使用的.我只是用枚举键/值填充成员,它可以工作,但我很好奇这个元类是什么.我假设它与ctypes有关,但我找不到有关子类化ctypes的更多信息.我知道EnumerationType没有像我使用Enumeration那样做任何事情.from ctypes import *class EnumerationType(type(c_uint)): def __new__(metacls, name, bases, dict): if not "_members_" in dict: _members_ = {} for key,value in dic...
假设我在Base中有两个类Base和Child.工厂方法调用另一个类方法,它可以被Base的子类覆盖.class Base(object):@classmethoddef create(cls, *args: Tuple) -> 'Base':value = cls._prepare(*args)return cls(value)@classmethoddef _prepare(cls, *args: Tuple) -> Any:return args[0] if args else Nonedef __init__(self, value: Any) -> None:self.value = valueclass Child(Base):@classmethoddef _prepare(cls, *args: Tuple) -...
我希望能够创建父类X的实例,并使用字符串“Q”作为额外参数.该字符串是一个名称,是父类X的子类Q的标识符.我希望父类的实例成为(或替换为)子类的实例. 我知道这可能是一个经典问题(错误?).经过一番搜索后,我找不到合适的解决方案.我自己想出了以下解决方案;我添加了一个可能的标识符字典作为其基类实例的键到父类的init方法.然后将相应子类的class-attribute分配给当前实例class-attribute.我要求init-method的参数不是默认值以防止...
我正在努力的游戏中遇到棘手的问题.我正在使用Pygame来开发它.我碰巧是那些从不使用default__dict__对象变量的开发人员之一;我总是定义__slots__以澄清对象可以拥有的变量(我有一个类方法,它读取插槽以确定配置文件中所需的变量). 无论如何,我只是意识到这种努力在我的一些班级中没有奏效;它们仍然有__dict__变量并且可以分配任意属性,即使它们明确定义了__slots__.我认为这是因为它们继承自pygame.sprite.Sprite,它具有__dict__.如...
我在超类中有一个函数,它返回一个自己的新版本.我有一个继承特定函数的超类的子类,但宁愿它返回子类的新版本.我如何对其进行编码,以便当函数调用来自父级时,它返回父级的版本,但是当从子级调用它时,它会返回子级的新版本?解决方法:如果new不依赖于self,请使用classmethod:class Parent(object):@classmethoddef new(cls,*args,**kwargs):return cls(*args,**kwargs) class Child(Parent): passp=Parent() p2=p.new() assert isin...
我正在编写很多非常相似的任务,并想知道如何更好地子类化Task以减少样板.因为一个任务只是一次实例化,所以你不能把事情放在__init__中,就像我在下面所示,但它应该说明这一点. 我想要完成的事情:class EmailTaskOne(Task):def run(self, object_id):email_data = EmailData.objects.get(pk=object_id)data = self.do_common_stuff(email_data)self.do_unique_stuff(data)class EmailTaskTwo(Task):def run(self, object_id):email_...
让我们先说一下you should use __new__ instead of __init__ for subclassing immutable objects这个问题. 话虽如此,让我们看看以下代码:class MyTuple(tuple):def __init__(self, *args):super(MyTuple, self).__init__(*args)mytuple = MyTuple([1,2,3])这适用于python2,但在python3中,我得到:Traceback (most recent call last):File "tmp.py", line 5, in <module>mytuple = MyTuple([1,2,3])File "tmp.py", line 3, in __in...
面向对象与面向过程分析 # 清晰知道操作的功能,但不明确操作的具体对象print(len(123))# 清晰最大操作的对象,但不明确具体的操作方法print(123.__len__()) 接口 # 接口:建立关联的桥梁,方便管理代码?# 接口类:用来定义功能的类,为继承它的子类提供功能的,该类的功能方法一般不需要有实现体,实现体有继承它的子类自己去实现?# 提供所有宠物应该有的功能class PetInterface: def close_master(self): pass?# 提供所有看...
抽象类与接口类 接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能 开发中容易出现的问题class Alipay:支付宝支付def pay(self,money):print(支付宝支付了%s元%money)class Applepay:apple pay支付def pay(self,money):print(ap...
python中子类继承父类成员变量之间的取值逻辑代码: # 定义父类personclass person(): def __init__(self,name,age,sex): self.name="zhangxiao" self.age=18 self.sex=sex def talk(self): print("i want to speak something to yo!!")# 定义子类chineseclass chinese(person): def __init__(self,name,age,sex,language): # 先继承父类的构造方法的两种方式 : # super(chin...
???? Python : 3.7.0 ?????? OS : Ubuntu 18.04.1 LTS ?????? IDE : PyCharm 2018.2.4 ????? Conda : 4.5.11 ???typesetting : Markdowncode """ @Author : 行初心 @Date : 18-9-23 @Blog : www.cnblogs.com/xingchuxin @Gitee : gitee.com/zhichengjiu """class Parent:def hello(self):print('我是父亲')class Child(Parent):# child类继承与 parent类def hello(self):# parent类中有hello方法,但是这里也定义了一个h...
???? Python : 3.7.0 ?????? OS : Ubuntu 18.04.1 LTS ?????? IDE : PyCharm 2018.2.4 ????? Conda : 4.5.11 ???typesetting : Markdownexample_1 code """ @Author : 行初心 @Date : 18-9-23 @Blog : www.cnblogs.com/xingchuxin @Gitee : gitee.com/zhichengjiu """class Parent:def __init__(self):# 父类的构造函数print("父类构造完毕")class Child1(Parent):# child1类继承于 parent类def __init__(self):print("子...
1. C#中多态实现的条件是 继承, 重写以及父类指向子类. 但是在弱类型Python里面, 实现多态的条件就显得很简洁, 只需要在子类中实现父类相同名称的方法即可.2. 鸭子类型的解释: 若一个类A和目标类B有具有相同的方法, 那么Python认为类A和类B是同种类型 即看起来像鸭子(都是class,都具有相同方法), 走(调用)起来也像鸭子, 那么该物种就是鸭 3. 调用 4. 结果展