三. python面向对象(私有属性和私有方法 私有静态方法 私有类方法)
生活随笔
收集整理的這篇文章主要介紹了
三. python面向对象(私有属性和私有方法 私有静态方法 私有类方法)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一. 私有屬性(封裝)
# 俠義 上的封裝 面向?qū)ο蟮娜筇匦灾?/span> # 屬性 和 方法都隱藏起來 不讓你看到 # 如果要讓內(nèi)部屬性不被外部屬性直接訪問 在屬性前加上兩個(gè)下劃線__ # 在python中 如果在屬性前加上兩個(gè)下劃線那么這個(gè)屬性就變成了私有屬性 # print(per.__money) #在屬性前面加上__不能訪問內(nèi)部屬性 class person(object):def eat(self ,food):print("eat-- " +food)print(self.__money) # 在內(nèi)部打印私有屬性def __init__(self,height ,weight ,money):# 定義屬性self.height =heightself.weight =weightself.__money =money # 定義私有屬性 per =person(300 ,100 ,20000) per.age =1000000000000000000000000 print(per.age) # 1000000000000000000000000 # print(per.__money) # 在屬性前面加上__不能訪問內(nèi)部屬性 會(huì)報(bào)錯(cuò) 所以只要在內(nèi)部訪問 per.eat("玻璃")# 如果要讓內(nèi)部屬性不被外部屬性直接訪問 在屬性前加上兩個(gè)下劃線__ # 在python中 如果在屬性前加上兩個(gè)下劃線那么這個(gè)屬性就變成了私有屬性 # 如果你想被外部訪問內(nèi)部屬性直接加上 __ 列如這里__money1. 修改私有屬性
class person(object):def __init__(self, height, weight, money):# 定義屬性self.height = heightself.weight = weightself.__money = money# 通過內(nèi)部的方法 修改私有屬性# 通過自定義的方法實(shí)現(xiàn)對(duì)私有屬性的賦值和取值def setMoney(self, money):# 數(shù)據(jù)過濾if money < 0:money = 0self.__money = moneydef getMoney(self):return self.__moneydef run(self):print(self.__money) # 內(nèi)部訪問 #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# 通過內(nèi)部的方法 修改私有屬性# 通過自定義的方法實(shí)現(xiàn)對(duì)私有屬性的賦值和取值def setMoney(self, money):# 數(shù)據(jù)過濾if money < 0:money = 0self.__money = moneydef getMoney(self):return self.__moneydef run(self):print(self.__money) # 內(nèi)部訪問 #22222222元print(self.__height__) #300 per = person( 300, 100, "22222222元") per.run()# 22222222元 per.setMoney(100) per.run() # 100 print(per.__height__) # 3002.私有方法
class Per(object):__key=55555 #靜態(tài)屬性 也可以變成私有屬性def __init__(self,name,passwd,age):self.name=nameself.__passwd=passwd # 加上__ 私有屬性self.__age=agedef get_pwd(self):print(self.__dict__)print(self.__key,"靜態(tài)私有屬性")return self.__passwd # 只有在類的內(nèi)部使用私有屬性 就會(huì)自動(dòng)的帶上 _類命def __agel(self): # 加上__私有方法# print(self.__doc__)print("私有方法!!!!!!")return self.__agedef login(self): #內(nèi)部調(diào)用私有方法 外部取不到 self.__agel() aa=Per("張三","123456",'222')print(aa.get_pwd()) # {'name': '張三', '_Per__passwd': '123456', '_Per__age': '222'} # 55555 靜態(tài)私有屬性 # 123456print(aa.login()) # None # 私有方法!!!!!! # None# print(aa._Per__passwd) # 不能這么調(diào)用 單下劃線 '_Per__age # print(aa._Per__age) # 不能這么調(diào)用 單下劃線 '_Per__age # # 123456 # # 222 aa.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 # 假設(shè) 父類的私有屬性 能被 子類 調(diào)用嗎 答案是 不能的 說明不能被繼承 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): # 在前面加上 __ 就變成了私有方法 和私有屬性一樣 只能內(nèi)部訪問 不能外部方法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): # 在前面加上 __ 就變成了私有方法 和私有屬性一樣 只能內(nèi)部訪問 不能外部方法
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 ?
?私有的靜態(tài)方法@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("我是靜態(tài)私有屬性哈哈哈哈哈")def cc(self):Gn.__fn() ss=Gn("王五",666) ss.cc() # 我是靜態(tài)私有屬性哈哈哈哈哈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("我是靜態(tài)私有屬性哈哈哈哈哈")@staticmethoddef stat():Gn.__fn()ss=Gn("王五",666) Gn.stat() # 我是靜態(tài)私有屬性哈哈哈哈哈??私有的類方法@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("實(shí)例化")@propertydef __bb(self):print("私有屬性")@propertydef cc(self):c.__bbc=Da() c.cc # 私有屬性 print("******************************************************************8")class Da(object):def aa(self):print("實(shí)例化")@propertydef __bb(self):print("私有屬性")def cc(self):c.__bb c=Da() c.cc() # 私有屬性?
轉(zhuǎn)載于:https://www.cnblogs.com/Sup-to/p/10878954.html
總結(jié)
以上是生活随笔為你收集整理的三. python面向对象(私有属性和私有方法 私有静态方法 私有类方法)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PE文件结构
- 下一篇: 5G元年的世界电信日,我们的生活将如何被