1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 三. python面向对象(私有属性和私有方法 私有静态方法 私有类方法)

三. python面向对象(私有属性和私有方法 私有静态方法 私有类方法)

时间:2019-01-24 05:19:46

相关推荐

三. python面向对象(私有属性和私有方法  私有静态方法 私有类方法)

一. 私有属性(封装)

# 侠义 上的封装 面向对象的三大特性之一# 属性 和 方法都隐藏起来 不让你看到# 如果要让内部属性不被外部属性直接访问 在属性前加上两个下划线__# 在python中 如果在属性前加上两个下划线那么这个属性就变成了私有属性# print(per.__money) #在属性前面加上__不能访问内部属性

class person(object):def eat(self ,food):print("eat-- " +food)print(self.__money)# 在内部打印私有属性def __init__(self,height ,weight ,money):# 定义属性self.height =heightself.weight =weightself.__money =money # 定义私有属性per =person(300 ,100 ,20000)per.age =1000000000000000000000000print(per.age) # 1000000000000000000000000# print(per.__money) # 在属性前面加上__不能访问内部属性 会报错 所以只要在内部访问per.eat("玻璃")# 如果要让内部属性不被外部属性直接访问 在属性前加上两个下划线__ # 在python中 如果在属性前加上两个下划线那么这个属性就变成了私有属性# 如果你想被外部访问内部属性直接加上 __ 列如这里__money

1. 修改私有属性

class person(object):def __init__(self, height, weight, money):# 定义属性self.height = heightself.weight = weightself.__money = money# 通过内部的方法 修改私有属性# 通过自定义的方法实现对私有属性的赋值和取值def setMoney(self, money):# 数据过滤if money < 0:money = 0self.__money = moneydef getMoney(self):return self.__moneydef run(self):print(self.__money) # 内部访问#22222222元per = person( 300, 100, "22222222元")per.run()# 22222222元per.setMoney(100)per.run() # 100

# 在python中 __xxx__属于特殊变量 可以直接访问的class person(object):def __init__(self, height, weight, money):# 定义属性self.__height__= heightself.weight = weightself.__money = money# 通过内部的方法 修改私有属性# 通过自定义的方法实现对私有属性的赋值和取值def setMoney(self, money):# 数据过滤if money < 0:money = 0self.__money = moneydef getMoney(self):return self.__moneydef run(self):print(self.__money) # 内部访问#22222222元print(self.__height__) #300per = person( 300, 100, "22222222元")per.run()# 22222222元per.setMoney(100)per.run() # 100print(per.__height__) # 300

2.私有方法

class Per(object):__key=55555 #静态属性 也可以变成私有属性def __init__(self,name,passwd,age):self.name=nameself.__passwd=passwd# 加上__ 私有属性self.__age=agedef get_pwd(self):print(self.__dict__)print(self.__key,"静态私有属性")return self.__passwd# 只有在类的内部使用私有属性 就会自动的带上 _类命def __agel(self): # 加上__私有方法# print(self.__doc__)print("私有方法!!!!!!")return self.__agedef login(self):#内部调用私有方法 外部取不到self.__agel()aa=Per("张三","123456",'222')print(aa.get_pwd())# {'name': '张三', '_Per__passwd': '123456', '_Per__age': '222'}# 55555 静态私有属性# 123456print(aa.login())# None# 私有方法!!!!!!# None# print(aa._Per__passwd) # 不能这么调用单下划线 '_Per__age# print(aa._Per__age) # 不能这么调用单下划线 '_Per__age# # 123456# # 222aa.login()# 私有方法!!!!!!

class Room(object):def __init__(self,name,length,width):self.name=nameself.__length=lengthself.__width=widthdef area(self):print(self.__width) # 10return self.__length*self.__widthaa=Room("张三",22,10)print(aa.area()) # 220print(aa.__dict__) # {'name': '张三', '_Room__length': 22, '_Room__width': 10}print(aa._Room__width) # 10

# 假设 父类的私有属性 能被 子类 调用吗 答案是 不能的 说明不能被继承class Foo:__key='1223'class Son(Foo):print(Foo.__key)

# 私有方法的使用class Gn(object):bar=11111def __init__(self,name,age):self.name=nameself.age=agedef __aa(self): # 在前面加上 __ 就变成了私有方法 和私有属性一样 只能内部访问 不能外部方法print(f'我叫--{self.name}--今年{self.age}')def __cc(self):print("卧槽11111111111111111111111111111111111111")def fn(self):self.__aa()self.__cc()ss=Gn("王五",666)ss.fn()

# 私有方法的使用

class Gn(object):

bar=11111

def __init__(self,name,age):

self.name=name

self.age=age

def __aa(self,v): # 在前面加上 __ 就变成了私有方法 和私有属性一样 只能内部访问 不能外部方法

print(f'我叫--{self.name}--今年{self.age}',v)

def __cc(self):

print("卧槽11111111111111111111111111111111111111")

def fn(self):

self.__aa("这是私有方法哦")

self.__cc()

ss=Gn("王五",666)

ss.fn()

# 我叫--王五--今年666 这是私有方法哦

# 卧槽11111111111111111111111111111111111111

私有的静态方法@staticmethod

class Gn(object):bar=11111def __init__(self,name,age):self.name=nameself.age=agedef __aa(self,v):print(f'我叫--{self.name}--今年{self.age}',v)@staticmethoddef __fn():print("我是静态私有属性哈哈哈哈哈")def cc(self):Gn.__fn()ss=Gn("王五",666)()# 我是静态私有属性哈哈哈哈哈print("********************************************************88")class Gn(object):bar=11111def __init__(self,name,age):self.name=nameself.age=agedef __aa(self,v):print(f'我叫--{self.name}--今年{self.age}',v)@staticmethoddef __fn():print("我是静态私有属性哈哈哈哈哈")@staticmethoddef stat():Gn.__fn()ss=Gn("王五",666)Gn.stat()# 我是静态私有属性哈哈哈哈哈

私有的类方法@staticmethod

class Gn(object):bar=11111@classmethoddef __aa(cls,name):print(cls.bar)print("我是类方法!!!!!!!!")print(name)def bb(self):Gn.__aa("张三")ss=Gn()ss.bb()# 11111# 我是类方法!!!!!!!!# 张三print("********************************************************")class Gn(object):bar=11111@classmethoddef __aa(cls):print(cls.bar)print("我是类方法!!!!!!!!")@classmethoddef bb(cls):Gn.__aa()ss=Gn()# ss.bb()Gn.bb()## 11111# 我是类方法!!!!!!!!

私有属性方法@property

class Da(object):def aa(self):print("实例化")@propertydef __bb(self):print("私有属性")@propertydef cc(self):c.__bbc=Da()# 私有属性print("******************************************************************8")class Da(object):def aa(self):print("实例化")@propertydef __bb(self):print("私有属性")def cc(self):c.__bbc=Da()()# 私有属性

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。