笔记比较简单,下面展示了类中属性更改的方式,以及对昨天最后一题类中任意关键字实参的初始化以及在类的方法中遍历的方式
1 就餐人数
在Restaurant类中添加统计就餐人数的方法
lass Restaurant():
"""显示餐馆信息"""
## 餐馆属性
def __init__(self,restaurant_name,cuisine_type):
self.restaurant_name = restaurant_name
self.cuisine_type = cuisine_type
self.number_served = 0
## 餐馆方法
def describle_restaurant(self):
print("The restaurant name is " + self.restaurant_name.title() + ".")
print("The restaurant cuisine_type is " + self.cuisine_type.title() + '.')
def open_restaurant(self):
print(self.restaurant_name + " 餐馆正在营业,欢迎你的到来!")
## 统计就餐人数方法
def set_served(self,person_number):
"""设置餐馆就餐人数"""
self.number_served = person_number
print("The restaurant have " + str(self.number_served ) +
" people " + " on eating.")
## 增加就餐人数的方法
def increment_number_served(self,number):
"""增加定值的就餐人数"""
self.number_served += number
print("The restaurant have " + str(self.number_served ) +
" people " + " on eating.")
实例化对象
r1 = Restaurant('muli', 'ol')
r1.describle_restaurant()
r1.open_restaurant()
r1.set_served(2000)
r1.increment_number_served(100)
结果:
The restaurant name is Muli.
The restaurant cuisine_type is Ol.
muli 餐馆正在营业,欢迎你的到来!
The restaurant have 2000 people on eating.
The restaurant have 2100 people on eating.
2 尝试登录次数
class User():
"""显示用户信息"""
## 用户属性
def __init__(self,first_name,last_name,**user_info):
## 设置已知属性
self.first_name = first_name
self.last_name = last_name
self.login_attempts = 0
## 设置未知属性
for k,v in user_info.items():
setattr(self, k, v)
## 用户方法
def describle_user(self):
## 已知属性打印
print("name" ," : ",self.first_name)
print("last_name"," : ",self.last_name)
## 未知属性打印
## 遍历setattr()函数
for key in self.__dict__:
print(key,": ",getattr(self,key))
## 用户登录次数方法
def increment_login_attempts(self,num):
"""用户登录次数增加函数"""
self.login_attempts += num
print("当前登录次数:",self.login_attempts)
## 重置用户登录次数方法
def reset_login_attempts(self):
"""重置用户登录次数"""
self.login_attempts = 0
print("当前登录次数:",self.login_attempts)
setattr()和getattr()方法的介绍
setattr函数用于在对象中设置指定属性的值
setattr(obj, name, value)
其中,obj是要设置属性值的对象,name是要设置的属性名,value是要设置的属性值。
例子:
class MyClass:
def __init__(self, **kwargs):
for key, value in kwargs.items():
setattr(self, key, value)
def my_func(self):
if hasattr(self, 'my_param'):
print(getattr(self, 'my_param'))
else:
print('my_param not found')
所以 setattr(obj,name,value) 方法三个参数可以设置为 self , key, value
getattr()方法介绍:getattr函数用于获取对象的属性值。它的语法如下:
getattr(obj, name[, default])
例子如下:
class MyClass:
def __init__(self, **kwargs):
for key, value in kwargs.items():
setattr(self, key, value)
def my_func(self):
for key in self.__dict__:
print(key, getattr(self, key))
从中可以看出,setattr(self,key,value) 和 getattr(self,key) 两个方法共用可以在类中接受任意关键字参数,并在类的方法中遍历任意位置参数
实例化对象
u1 = User('wang', 'wei', location="wuhang", work='jixiegongcheng')
u1.describle_user()
print("location:", u1.location)
print("work: ", u1.work)
结果:
name : wang
last_name : wei
first_name : wang
last_name : wei
login_attempts : 0
location : wuhang
work : jixiegongcheng
location: wuhang
work: jixiegongcheng
print("location:", u1.location)
print("work: ", u1.work)
上面两句话等价于类中方法下面几段代码
## 未知属性打印
## 遍历setattr()函数
for key in self.__dict__:
print(key,": ",getattr(self,key))
多次设置访问次数并多次重置访问次数
u1.increment_login_attempts(5)
u1.reset_login_attempts()
u1.increment_login_attempts(100)
u1.reset_login_attempts()
u1.increment_login_attempts(1000000)
u1.reset_login_attempts()
结果:
当前登录次数: 5
当前登录次数: 0
当前登录次数: 100
当前登录次数: 0
当前登录次数: 1000000
当前登录次数: 0
总结:
1、类的属性更改方法:通过实例调用属性来更改或者在类中设置更新类属性的方法
2、类中接受任意位置参数并遍历的方法:需要结合setattr()方法和getattr()方法
注意:如果在类字典中的键名与类的现有属性名重复,那么setattr函数将会覆盖现有属性的值。