__call__
方法和可调用对象凡是可以将 () 直接应用到自身并执行, 都称为可调用对象.
注意:
__call__()
的对象, 称为“可调用对象”, 即该对象可以像函数一样被调用.实操代码
def f1():
print("f1")
f1() # 本质上也是调用了 __call__()方法
class Car:
def __call__(self, age, money):
print("调用__call__()方法")
print("车龄:{0}, 金额:{1}".format(age, money))
f2 = Car()
f2(3, 289000) # 像函数那样调用, 本质上也是调用了 __call__()
@property
装饰器相当于在Java中实现了对属性的get 方法
注意:
@property
可以将一个方法的调用方式变成“属性调用”.@property
主要用于帮助我们处理属性的读操作、写操作emp1.salary = 30000
如上的操作读操作、写操作 但是这种做法不安全. 比如, 我需要限制薪水必须为 1-10000 的数字. 这时候我们就需要通过使用装饰器 @property
来处理.实操代码
class Employee:
def __init__(self, name, salary):
self.name = name
self.__salary = salary
@property # 相当于salary属性的getter方法
def salary(self):
print("月薪为{0}, 年薪为{1}".format(self.__salary, 12 * self.__salary))
return self.__salary
@salary.setter
def salary(self, salary): # 相当于salary属性的setter方法
if 0 < salary < 1000000:
self.__salary = salary
else:
print("薪水录入错误! 只能在0-1000000之间")
emp1 = Employee("时间静止", 8848.48)
print(emp1.salary)
emp1.salary = 12580
print(emp1.salary)
实操代码
obj = None
obj2 = None
print(type(None))
print(id(None))
print(id(obj))
print(id(obj2))
"""输出结果
'nonetype'>
140706372487160
140706372487160
140706372487160
"""
实操代码
# None不是False, None不是0, None不是空字符串. None和任何其他的数据类型比较永远返回False.
a = None
if a is None and a == None:
print("a是None") # 会执行
if a == False or a == 0:
print("None不等于False") # 不会被打印
a = []
b = ()
c = {}
d = ""
e = 0
f = None
# if语句判断时,空列表[]、空字典{}、空元组()、0等一系列代表空和无的对象会被转换成False
if (not a) and (not b) and (not c) and (not d) and (not e) and (not f):
print("if判断时, 空列表[]、空字符串、0、None等代表空和无的对象会被转换成False")
# == 和 is 判断时, 空列表、空字符串不会自动转成 False
if a == False or d == False:
print("==时, 空列表、空字符串不是False!") # 不会执行
if(e == False):
print("==时, 0会转成False")
全部0条评论
快来发表一下你的评论吧 !