鱼C论坛

 找回密码
 立即注册
查看: 2430|回复: 0

[学习笔记] 属性访问_魔法方法

[复制链接]
发表于 2023-2-19 22:04:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# !/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time   : 2023/2/19 21:35
# @Author : xiongming
# @File   : shuxingxiangguanhanshu.py
# @Desc   : 属性访问

class C:
    def __init__(self, name, age):
        self.name = name
        self.__age = age

c = C("小甲鱼", 18)

# 查询类的属性是否有name
a = hasattr(c, "name")
print(a)

# 获取对象某个属性值
b = getattr(c, "name")

# name mangling _类名__私有属性名
e = getattr(c, "_C__age")

print(b)
print(e)

# setattr 修改私有属性
setattr(c, "_C__age", 19)
print(getattr(c, "_C__age"))

# delattr 删除私有属性
delattr(c, "_C__age")
print(hasattr(c, "_C__age"))

# 魔法方法

class A:
    def __init__(self, name, age):
        self.name = name
        self.__age = age
    def __getattribute__(self, attrname):
        print("拦截'小甲鱼',拿来吧你")
        return super().__getattribute__(attrname)


a = A("小甲鱼", 18)
aa = getattr(a, "_A__age")
print(aa)
a._A__age

class B:
    def __init__(self, name, age):
        self.name = name
        self.__age = age
    def __getattribute__(self, attrname):
        print("拦截'小甲鱼',拿来吧你")
        return super().__getattribute__(attrname)
    def __getattr__(self, item):
        if item == "FishC":
            print("I love FishC")
        else:
            raise AttributeError(item)

print("------BBBB--------")
bb = B("小甲鱼", 18)
bb.FishC
print("------BBBB--------")
# bb.xx  AttributeError: xx

# setattr
class DD():
    def __setattr__(self, name, value):
        self.__dict__[name] = value
    def __delattr__(self, name):
        del self.__dict__[name]

dd = DD()
dd.name = "小甲鱼"
print(dd.name)
print(dd.__dict__)
del dd.name
print(dd.__dict__)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 07:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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