Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中如何将值传递给@属性?_Python_Oop_Decorator - Fatal编程技术网

在python中如何将值传递给@属性?

在python中如何将值传递给@属性?,python,oop,decorator,Python,Oop,Decorator,因此,我正在编写一个python脚本来修改电视节目标题。这比任何事情都更需要练习。我试图使用@property decorator,但我有一个错误的想法,当你使用“var.property”时,我认为var会传递给属性。。。因此,我试图让splitName()能够使用基类中的hasDots属性,但我不确定如何将name Var传递到属性中。我知道我可以用一种方法做到这一点,但我正在努力学习如何使用属性。一旦我能让基类正常工作,splitName()方法将成为主要方法 在此方面的任何帮助都将不胜感

因此,我正在编写一个python脚本来修改电视节目标题。这比任何事情都更需要练习。我试图使用@property decorator,但我有一个错误的想法,当你使用“var.property”时,我认为var会传递给属性。。。因此,我试图让splitName()能够使用基类中的hasDots属性,但我不确定如何将name Var传递到属性中。我知道我可以用一种方法做到这一点,但我正在努力学习如何使用属性。一旦我能让基类正常工作,splitName()方法将成为主要方法

在此方面的任何帮助都将不胜感激。另外,我对python还很陌生,所以如果我正在做任何“非python”的事情,请告诉我

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

在学习时仔细阅读文档是个好主意

看看这里的第三个代码示例

这就是如何为使用内置
property
decorator定义的属性定义setter和deleter


附言:这里有相应的Python 2文档:

什么是“您想做什么”?代码没有做什么是您希望它做的?我试图让splitName()能够从基类使用hasDots属性,但我不确定如何将name Var传递到属性中。我知道我可以用一种方法来实现这一点,但我正在尝试学习如何使用属性。试着在开始时用过程式编写代码。现在你的代码很难看,很难理解你想做什么。例如,“For name in self.fileName()”名称是字符串,它没有方法hasDots,使用camelCase不是phythonic。让我们试着从基础开始。谢谢你的回复。这是非常有帮助的。。。根据你的建议,我改变了我的编码结构。
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