您的位置:首页 > 编程语言 > Python开发

python3自学之路-笔记22—面向对象编程-类的只读属性,新式类与经典类

2019-04-03 21:30 309 查看

python3自学之路-笔记22—面向对象编程-类的只读属性,新式类与经典类

 

[code]#!/usr/bin/env python3
# _*_ coding: utf-8 _*_
# File  : 类的只读属性.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date  : 2019/4/3

#方法1,禁用属性的读写操作,再部分公开。私有化属性

class person:
def __init__(self):
self.__age=18
def getAge(self):
return  self.__age

p1=person()
p1.age=5
print(p1.__dict__)
print(p1.getAge())

#方法2  可读,但是写时不允许,会报错。利用装饰器pronperty加上函数

class person1(object):
def __init__(self):
self.__age = 18
#可以用使用属性方式使用下面方法。装饰器
@property
def Age(self):
return self.__age

p2 = person1()
p2.age = 5
print(p2.__dict__)
print(p2.Age)
# p2.Age=666  赋值会报错

 

 

[code]#!/usr/bin/env python3
# _*_ coding: utf-8 _*_
# File  : 经典类和新式类.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date  : 2019/4/3

#方法1
class person:
def __init__(self):
self.__age=18

def get_age(self):
return self.__age
def set_age(self,value):
self.__age=value
age=property(get_age,set_age)

print(person.__bases__)
p=person()
print(p.age)
p.age=90
print(p.age)
print(p.__dict__)

#方法2
class person1:
def __init__(self):
self.__age=18

@property
def age(self):
return self.__age
@age.setter
def age(self,value):
self.__age=value
p1=person1()
print(p1.age)
p1.age=20
print(p1.age)
print(p1.__dict__)

 

类的私有化屏蔽,只读:

[code]#!/usr/bin/env python3
# _*_ coding: utf-8 _*_
# File  : 类私有屏蔽.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date  : 2019/4/3

class Person:
def __setattr__(self, key, value):
print(key, value)
if key == "age" and key in self.__dict__.keys():
print("only read")
else:
# self.key=value   #不要这么搞,这是死循环
self.__dict__[key] = value

p = Person()
p.age = 18
print(p.age)
p.age = 999
print(p.age)

print(p.__dict__)

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: