首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python类设计:属性

Python类设计:属性
EN

Stack Overflow用户
提问于 2012-09-13 23:06:18
回答 2查看 107关注 0票数 1

我构造了一个类:

代码语言:javascript
复制
class Foo (object):
      def __init__(self,List):
          self.List=List
      @property
      def numbers(self):
          L=[]
          for i in self.List:
              if i.isdigit():
                 L.append(i)
          return L
      @property
      def letters(self):
          L=[]
          for i in self.List:
              if i.isalpha():
                 L.append(i)
          return L

>>> inst=Foo(['12','ae','45','bb'])
>>> inst.letters
['ae', 'bb']
>>> inst.numbers
['12', '45']

如何添加属性才能执行返回['45']inst.numbers.odd

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-13 23:12:27

您的numbers属性返回一个列表,因此numbers.odd将不起作用。

但是,您可以遵循如下工作流程:

  • 定义了一个小类Numbers,它将定义两个属性evenodd例如,Numbers可以将一个列表作为其__init__的参数,even属性将只返回此列表实例的偶数(以及D11>的奇数)D15属性(使用D16对其进行初始化)中的D14实例,并返回此实例...H217F218

您的Numbers类可以按照建议直接继承内置list类。你也可以像这样定义它

代码语言:javascript
复制
class Numbers(object):
    def __init__(self,L):
        self.L = L
    @property
    def even(self):
        return [i for i in self.L if not int(i)%2]
    def __repr__(self):
        return repr(self.L)

在这里,我们返回Numbers的表示形式作为其L属性(列表)的表示形式。很好,除非您想要向Numbers实例追加一些东西,例如:您必须定义一个Numb.append方法……将Numbers作为list的子类可能更容易:

代码语言:javascript
复制
 class Numbers(list):
    @property
    def even(self):
        ...

编辑:更正了%__的//,因为我走得太快了,不够小心

票数 3
EN

Stack Overflow用户

发布于 2012-09-13 23:17:37

下面是一个愚蠢的例子:

代码语言:javascript
复制
class mylst(list):
    @property
    def odd(self):
        return [ i for i in self if int(i)%2 == 1 ]

class Foo(object):
    def __init__(self,lst):
        self.lst = list(lst)

    @property
    def numbers(self):
        return mylst( i for i in self.lst if i.isdigit() )

a = Foo(["1","2","3","ab","cd"])
print(a.numbers)
print(a.numbers.odd)

基本上,我们只是将list子类化,并添加一个返回另一个列表的属性odd。因为我们的结构是list的子类,所以它实际上与真实的东西(恐怖的鸭子类型!)难以区分。如果你想要再次过滤,mylst.odd甚至可以返回一个新的mylst实例(例如a.numbers.odd.in_fibinocci )

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12409332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档