面向对象(三)

目录

私有属性和私有方法(实现封装)

@property装饰器

属性和方法命名总结

类编码风格

关于None和判断的总结

None是什么?

None和其他类型的比较


私有属性和私有方法(实现封装)

Python对于类的成员没有严格的访问控制限制,这与其他面向对象语言有区别。关于私有属性和私有方法,有如下要点:

  1. 通常我们约定,两个下划线开头的属性是私有的(private)。其他为公共的(public)。
  2. 类内部可以访问私有属性(方法)
  3. 类外部不能直接访问私有属性(方法)
  4. 类外部可以通过_类名__私有属性(方法)名”访问私有属性(方法)

@property装饰器

@property可以将一个方法的调用方式变成“属性调用”。

@property主要用于帮助我们处理属性的读操作、写操作。对于某一个属性,我们可以直接通过:

emp1.salary = 30000

如上的操作读操作、写操作。但是,这种做法不安全。比如,我需要限制薪水必须为1-10000的数字。这时候,我们就需要通过使用装饰器@property来处理。

#测试@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("浊酒",100)
print(emp1.salary)

emp1.salary = -200

远行结果:

月薪为100,年薪为1200
100
薪水录入错误!只能在0-1000000之间

属性和方法命名总结

  1. _xxx:保护成员,不能用from module import *导入,只有类对象和子类对象能访问这些成员。(⚠️讲完模块再看)
  2. __xxx__:系统定义的特殊成员
  3. __xxx: 类中的私有成员,只有类对象自己能访问,子类对象也不能访问。(但,在类外部可以通过对象名. _类名__xxx这种特殊方式访问。Python不存在严格意义的私有成员)

⚠️ 再次强调,方法和属性都遵循上面的规则。

类编码风格

  1. 类名首字母大写,多个单词之间采用驼峰原则。
  2. 实例名、模块名采用小写,多个单词之间采用下划线隔开
  3. 每个类,应紧跟“文档字符串”,说明这个类的作用
  4. 可以用空行组织代码,但不能滥用。在类中,使用一个空行隔开方法;模块中,使用两个空行隔开多个类

关于None和判断的总结

None是什么?

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

执行结果:

<class 'NoneType'>
140730826386632
140730826386632
140730826386632

⚠️None不是False,None不是0,None不是空字符串。None和任何其他的数据类型比较永远返回False。

None和其他类型的比较

a = None
if a is None and a==None:
  print("a是None")       #会执行
if a==False or a==0:
  print("None不等于False")    #不会被打印

空列表、空字符串、0之间的比较

  1. if语句判断时,空列表[]、空字典{}、空元组()、0等一系列代表空和无的对象会被转换成False

    a=[];b=();c={};d="";e=0;f=None
    if (not a) and (not b) and (not c) and (not d) and (not e) and (not f):
      print("if判断时,空列表[]、空字符串、0、None等代表空和无的对象会被转换成False")
    
  2. ==is判断时,空列表、空字符串不会自动转成False

    a=[];b=();c={};d="";e=0;
    if (a==False or d==False):
      print("==时,空列表、空字符串不是False!")  #不会执行
    if(e==False):
      print("==时,0会转成False")
    

  • 19
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值