吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1338|回复: 2
收起左侧

[Python 转载] 【笔记】方法的动态性、私有属性与方法、@property装饰器、get和set方法

  [复制链接]
cccyyys 发表于 2021-6-26 14:39
方法的动态性Python是动态语言,我们可以为类添加新的方法,也可以修改已有的方法。
[Python] 纯文本查看 复制代码
#方法的动态性
class Person:
    def work(self):
        print('努力工作')

def play_game(s):
    print(s,"在玩游戏")

def work2(s):
    print('好好上班,努力工作')

Person.play = play_game   #增加方法
p =Person()
p.work()
p.play()
Person.work = work2  #修改函数内的方法
p.work()

运行结果:努力工作
<__main__.Person object at 0x000001CB5882EFD0> 在玩游戏
好好上班,努力工作
这里面包含了方法的增加和修改,注意work2的形参数量要大于等于work的形参数量,否则会报错。
私有属性与私有方法(实现封装
要点:1、通常约定两个下划线开头的是私有属性,其他的为公共的。
2、类内部可以访问私有属性
3、类外部不能直接访问私有属性
4、类外部可以通过“_类名__私有属性(方法)名”来访问私有属性。
[Python] 纯文本查看 复制代码
class Employee:
    def __init__(self,name,age):
        self.name = name
        self.__age = age  #私有属性
    def __work(self):     #私有方法
        print('好好工作,努力上班')
        print(self.__age)  #私有属性在类内部可以随意访问


e = Employee('cys',18)
print(e._Employee__age)  #外部访问需要“_类名__私有属性名”访问
print(e.name)
e._Employee__work()

运行结果:18
cys
好好工作,努力上班
18
类变量同样可以私有,访问方法同私有属性和私有方法相同。
@property装饰器
@property装饰器可以将一个方法的调用方式变成是”属性调用“。
[Python] 纯文本查看 复制代码
#@property装饰器的最简化用法
class Employee:
    @property
    def salary(self):
        return 30000

e = Employee()
print(e.salary)

运行结果为:30000
这就是一个@property装饰器的最简单的用法,像调用属性一样调用方法。
[Python] 纯文本查看 复制代码
class Employee:

    def __init__(self,name,salary):
        self.__name = name
        self.__salary = salary

    @property
    def salary(self):    #获取salary的值
        return self.__salary
    @salary.setter   #表示针对salary属性的设置
    def salary(self,s):
        if 2000 < s < 50000:
            self.__salary = s
        else:
            print('输入值有误,薪资应在2000-50000之间')

e = Employee('cys',5000)
print(e.salary)
e.salary = 20000   #使用装饰器后可以直接赋值
print(e.salary)
'''  没有用装饰器的情况下访问个修改私有属性
    def get_salary(self):    #获取salary的值
        return self.__salary
    def set_salary(self,s):   #修改salary的值
        if 2000<s<50000:
           self.__salary = s
        else:
            print('输入值有误,薪资应在2000-50000之间')

e = Employee('cys',5000)
print(e.get_salary())
e.set_salary(20000)
print(e.get_salary())'''

运行结果为:5000
20000
这里面使用了装饰器和get、set方法两种方法进行了访问和修改操作,“@salary.setter”表示针对salary属性进行的修改,使用该装饰器后,修改salary属性的值便可以直接赋值修改了。

免费评分

参与人数 2吾爱币 +7 热心值 +2 收起 理由
吾要学破解 + 2 + 1 我很赞同!
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
源啊呢哈 发表于 2021-6-26 19:21
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| cccyyys 发表于 2021-6-26 21:35
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 16:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表