栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python学习 DAY 8

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python学习 DAY 8

Python中 方法没有重载

Python 中 方法的的参数没有声明类型 调用时确定参数的类型 参数的数量也可以由 可变参数控制。因此 Python 中是没有方法的重载的。定义一个方法即可有多种调用方式 相当于实现了其他语言中的方法的重载。

如果我们在类体中定义了多个重名的方法 只有最后一个方法有效。

方法的动态性

Python 是动态语言 我们可以动态的为类添加新的方法 或者动态的修改类的已有的方法。

#测试方法的动态性
class Person:
 def work(self):
 print( 努力上班 )
def playgame(a):
 print( {0}在玩游戏 .format(a))
def work2(a):
 print( 好好工作 努力上班 )
Person.Play playgame #可以定义新的方法
p Person()
p.work() #结果 努力上班 
p.Play() #等价于Person.Play(p)
 #结果 __main__.Person object at 0x0000024BEBC20FD0 在玩游戏
Person.work work2 #还可以修改老的方法
p.work() #结果 好好工作 努力上班 
私有私有属性和私有方法 实现封装

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

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

方法本质上也是属性

#测试私有属性、私有方法
class Employee:
 __school NJUST #私有类属性
 def __init__(self,name,age):
 self.name name
 self.__age age #age为私有属性
 def __work(self): #私有方法
 print( 好好工作 )
 print( 年龄: ,self.__age) #类内部可以访问私有属性
 print( 学校 ,Employee.__school)
e Employee( Lee ,20)
print(e.name)
print(e._Employee__age) #访问私有属性的方法 因为私密属性就是以此名字保存
e._Employee__work() #调用私有方法
print(Employee._Employee__school)

结果

Lee
好好工作 
年龄: 20
学校 NJUST
NJUST
property 装饰器

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

property 主要用于帮助我们处理属性的读操作、写操作。

#简单测试 property的用法
class Employee:
 property
 def salary(self):
 print( salary running )
 return 10000
emp1 Employee()
print(emp1.salary) 
#结果 salary running 
# 10000
class Employee:
 def __init__(self,name,salary):
 self.__name name
 self.__salary salary
 def get_salary(self):
 return self.__salary
 def set_salary(self,salary):
 if 1000 salary 50000:
 self.__salary salary
 else:
 print( 录入错误 薪水应在1000~50000 )
emp1 Employee( Lee ,20000)
print(emp1.get_salary()) #结果 20000
emp1.set_salary(30000)
print(emp1.get_salary()) #结果 30000

property的实现比较复杂 我们先考察如何使用。把一个getter方法变成属性 只需要加上 property就可以了 此时 property本身又创建了另一个装饰器 score.setter 负责把一个setter方法变成属性赋值 于是 我们就拥有一个可控的属性操作

只定义getter方法 不定义setter方法就是一个只读属性

使用 property装饰器实现上功能

class Employee:
 def __init__(self,name,salary):
 self.__name name
 self.__salary salary
 property #相当于 salary 属性的 getter 方法
 def salary(self):
 return self.__salary
 salary.setter
 def salary(self,salary):
 if 1000 salary 50000: #相当于 salary 属性的 setter 方法
 self.__salary salary
 else:
 print( 录入错误 薪水应在1000~50000 )
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/267276.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号