property用在面向对象中,用户简化代码,getter setter方法像成员变量一样调用
另外python在定义class的时候与java有所不同,
class Student,class Student(),class Student(object) 没有任何区别,其中object代表继承
变量前加双下划线代表私有变量,不需要像java加private关键字
import time
class Student(object):
def __init__(self,name,gender="nan",address="No Address"):
self.__name = name
self.__gender = gender
self.__address = address
@property
def name(self): return self.__name
@name.setter
def name(self,name): self.__name = name
def __str__(self):
return f"name is {self.__name}, gender is {self.__gender}, address is {self.__address}"
def __del__(self):
print(f"Student {id(self)} has been deleted")
def run(self):
print(f"Student is run.....")
if __name__ == '__main__':
s = Student(name="zhangsan");
s.name = "dsfsfsfs"
print(s)
s.run()
time.sleep(1)
print("after sleep 1s")
name is dsfsfsfs, gender is nan, address is No Address
Student is run.....
after sleep 1s
Student 1161272647632 has been deleted
最后del调用时因为程序结束,对象被回收