所以我正在编写一个修改电视节目标题的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
答案 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