@property 装饰器
@property装饰器可以把一个方法变成一个类的属性
这个方法的返回值就是这个类的对象的属性值
比如这样
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
def sayhi(self):
print('hello')
@property
def isTeacher(self):
return True
p1 = Person('Alice', 20)
p1.sayhi()
print(p1.isTeacher)
再比如,一个类中有一个列表
class Teacher():
def __init__(self):
self.student_list = []
@property
def size(self):
return len(self.student_list)
class Student():
def __init__(self, name):
self.name = name
stu01 = Student('aa')
stu02 = Student('bb')
stu03 = Student('cc')
tea = Teacher()
tea.student_list.append(stu01)
tea.student_list.append(stu02)
tea.student_list.append(stu03)
print(tea)
print(tea.size)
Teacher持有Student列表
然后size方法加上了@property
size()就变成了属性size
然后tea可以直接调用size属性
tea.size
定义Stack栈
class Container():
def __init__(self):
self.elements = []
@property
def size(self):
return len(self.elements)
def __str__(self):
return str(self.elements)
class Stack(Container):
def push(self, element):
self.elements.append(element)
def pop(self):
return self.elements.pop()
def top(self):
return self.elements[self.size - 1]
stack = Stack()
stack.push('1')
stack.push('2')
stack.push('3')
print(stack.top())
print(stack)
也可以简化一下,直接写Stack
class Stack():
def __init__(self):
self.elements = []
@property
def size(self):
return len(self.elements)
def __str__(self):
return str(self.elements)
def push(self, element):
self.elements.append(element)
def pop(self):
return self.elements.pop()
def top(self):
return self.elements[self.size - 1]
stack = Stack()
stack.push('1')
stack.push('2')
stack.push('3')
print(stack.top())
print(stack)
其实就是用Stack类来维护一个列表