Python面向对象深化(下)

描述

__call__ 方法和可调用对象

凡是可以将 () 直接应用到自身并执行, 都称为可调用对象.

注意:

  1. 可调用对象包括自定义的函数、Python 内置函数、以及本节所讲的实例对象.
  2. 定义了 __call__() 的对象, 称为“可调用对象”, 即该对象可以像函数一样被调用.
  3. 该方法使得实例对象可以像调用普通函数那样, 以“对象名()”的形式使用

实操代码

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 装饰器

@property 装饰器相当于在Java中实现了对属性的get 方法

注意:

  1. @property 可以将一个方法的调用方式变成“属性调用”.
  2. @property 主要用于帮助我们处理属性的读操作、写操作
  3. 对于某一个属性, 我们可以直接通过: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)

关于None和判断的总结

None是什么

  • 与C和JAVA不同, python中是没有 NULL 的, 取而代之的是 None . None 是一个特殊的常量, 表示变量没有指向任何对象.
  • 在Python中,  None 本身实际上也是对象, 有自己的类型 NoneType .
  • 你可以将 None 赋值给任何变量, 但我们不能创建 NoneType 类型的对象

实操代码

obj = None

obj2 = None

print(type(None))

print(id(None))

print(id(obj))

print(id(obj2))

"""输出结果

 'nonetype'>

140706372487160

140706372487160

140706372487160

"""

None和其他类型的比较

  • None不是False, None不是0, None不是空字符串. None和任何其他的数据类型比较永远返回False
  • if语句判断时,空列表[]、空字典{}、空元组()、0等一系列代表空和无的对象会被转换成False
  • == 和 is 判断时, 空列表、空字符串不会自动转成 False

实操代码

# 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")

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分