如何将值传递给python中的@property?

时间:2013-02-22 06:59:30

标签: python oop decorator

所以我正在编写一个修改电视节目标题的python脚本。这比练习更重要。我试图使用@property装饰器,但我误以为当你做" var.property"我认为var会被传递给属性...所以我试图让splitName()能够使用基类中的hasDots属性,但是我不确定你会怎么做将名称Var传递给属性。我知道我可以用一种方法做到这一点,但我试图学习如何使用属性。一旦我能让基类正常工作,splitName()方法将成为主要方法。

对此的任何帮助将不胜感激。我也是蟒蛇新手,所以如果我做任何事情,那就是" unpythonic"让我知道。

exceptibleExts = ['.avi','.mkv','mp4']

class Base(object):

    def __init__(self, source):
        self.source = source
        self.isTvShow()


    # this method will return the file name
    def fileName(self):
        for name in self.source:
            name, ext = os.path.splitext(name)
            yield name, ext


    @property
    def isTvShow(self):
        names = self.fileName()
        for name in names:
            if str(name[1]) in exceptibleExts and str(name[1]).startswith('.') == False:
                return True
            else:
                return False

    @property
    def hasDots(self):
        names = self.fileName()
        for name in names:
            if '.' in str(name[0]):
                return True
            else: 
                return False


    @property
    def hasDashes(self):
        names = self.fileName()
        for name in names:
            if '-' in str(name[0]):
                return True
            else:
                return False

    @property
    def startswithNumber(self):
        names = self.fileName()
        for name in names:
            if str(name[0].lstrip()[0].isdigit()):
                return True
            else:
                return False

    @property
    def hasUnderscore(self):
        names = self.fileName()
        for name in names:
            if '_' in str(name[0]):
                return True
            else:
                return False

class names(Base):
    def __init__(self, source):
        self.source = source
        #pass

        self.splitName()

    #this method returns true if the show title is in the file name... if not it will return false
    def hasShowTitle(self):
        pass



    def splitName(self):
        #names = self.fileNames
        showInfo = {}
        for name in self.fileName():
            print name.hasDots

1 个答案:

答案 0 :(得分:2)

在学习某些东西时,最好仔细阅读文档。

请查看此处的第三个代码示例http://docs.python.org/3/library/functions.html#property

class C:
    def __init__(self):
        self._x = None

    @property
    def x(self):
        """I'm the 'x' property."""
        return self._x

    @x.setter
    def x(self, value):
        self._x = value

    @x.deleter
    def x(self):
        del self._x

这是为使用内置property装饰器定义的属性定义setter和deleters的方法。

P.S。:对应的Python 2文档在这里:http://docs.python.org/2/library/functions.html#property