每天进步一点点-面向对象__solt__
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:Sun
# datetime:2022/7/26 0026
"""
动态语言允许我们在程序运行时给对象绑定新的属性或方法,
当然也可以对已经绑定的属性和方法进行解绑定。
但是如果我们需要限定自定义类型的对象只能绑定某些属性,
可以通过在类中定义__slots__变量来进行限定。
需要注意的是__slots__的限定只对当前类的对象生效,对子类并不起任何作用。
原文链接:https://blog.csdn.net/Crystal_remember/article/details/117448232
"""
class Person(object):
# 限定Person对象只能绑定_name, _age和_gender属性
__slots__ = ('_name', '_age', '_gender')
def __init__(self, name, age):
self._name = name
self._age = age
@property
def name(self):
return self._name
@property
def age(self):
return self._age
@age.setter
def age(self, age):
self._age = age
def play(self):
if self._age <= 16:
print('%s正在玩飞行棋.' % self._name)
else:
print('%s正在玩斗地主.' % self._name)
def main():
person = Person('王大锤', 22)
person.play()
person._gender = '男'
# AttributeError: 'Person' object has no attribute '_is_gay'
person._is_gay = True
print(person._is_gay)
main()
class DataBean:
"""bean类"""
# 替代getter方法
@property
def username(self):
"""获取用户名"""
return self.username
@property
def password(self):
""""获取密码"""
return self.password
# 替代setter方法
@username.setter
def username(self, username: str):
"""设置用户名"""
self.username = username
@password.setter
def password(self, password: str):
"""设置密码"""
self.password = password
# 测试
data_bean = DataBean()
# 直接赋值
data_bean.username = "123"
print(data_bean.username)
人生苦短,我用python!