Python_class、アクセス制限(私有財産とプライベートメソッド)

もう一つの焦点はあるで、「アクセスを制限する」オブジェクト指向
私たちは、あなたは属性名の前に2つのアンダースコアを追加することを、私有財産として定義されているプロパティについて話している:__ xxxの
アクセス制限機能を保護するために、民間施設は自由にアクセスすることはできません

class Hero(object):
    def __init__(self,name,skill): #我们将超级英雄的名字和技能导入
        self.name = name
        self.__skill = skill   #这里,钢铁侠小心机得隐藏了自己的属性(实例变量==>私有变量)

iron = Hero('Ironman','IonCannon')
print(iron.name)  #这里我们会得到Ironman
print(Hero.skill)  #这里却得不到IonCannon

しかし、私有財産は、次のshowメソッドとしてクラスメソッド、呼び出すことができます

上記外部ランダムアクセス呼び出しを変更することはできません、と述べたが、実際には....まだGET_xxxファンクションの方法でアクセスすることができます

class Hero(object):
    def __init__(self,name,skill): #我们将超级英雄的名字和技能导入
        self.name = name
        self.__skill = skill #私有属性skill
    def get_skill(self):  #get只是一个格式,可以改其他不影响函数,只是在python习惯使用他(大家都这么用咱就不要做杠精好吧)
        return self.__skill  #这样通过实例内部调用,返回私有属性skill

iron= Hero('Ironman','IonCannon')
print(iron.get_skill())  #这样就可以打印出被隐藏的skill了~

#もっと残酷があり、我々はまた、set_xxxによって変更することができ、emmm ...(良い私有財産にそれを言うの?(●∀●))
 

class Hero(object):
    def __init__(self,name): #我们将超级英雄的名字和技能导入
        self.name = name
        self.__skill = 'Kungfu' #私有属性skill,这里要做的是修改,所以我们想给skill赋值
    def get_skill(self):  #get只是一个格式,可以改其他不影响函数,只是在python习惯使用他(大家都这么用咱就不要做杠精好吧)
        return self.__skill  #这样通过实例内部调用,返回私有属性skill
    def set_skill(self,skill_02):
        self.__skill = skill_02  #这样通过实例内部调用,返回私有属性后再将参数skill_02f赋给他

iron= Hero('Ironman')
iron.set_skill('SuperIonCannon')
print(iron.get_skill())  #看看是不是边成‘超级离子炮了’

ここでは、この方法はまだ変更することができ__skillデフォルトのプロパティがあっても
形式上であなたは私たちが書くことができるように厳格な不文律をインストールしたい、という言及は〜楽しいです

....もう一つのポイントは、私たちは本当にそれだけの中から呼び出すことができますか?(¯▽¯)」、ノー

class Hero(object):
    def __init__(self,name,skill): #我们将超级英雄的名字和技能导入
        self.name = name
        self.__skill = skill #私有属性skill
iron= Hero('Ironman','IonCannon')
print(iron._Hero__skill) #==>'IonCannon'可以通过这样的函数直接访问得到私有属性

Pythonインタプリタの異なるバージョンが異なる変数名に__nameを出してもよいので、しかし、強く、あなたがそれをしないことをお勧めします。(遼雪峰マスターからブログ)
...もはや我慢することができますがあり、それは空腹良いが、それを修正することができますことは明らかですか?
内蔵使用@propertyデコレータ  

class Hero(object):
    def __init__(self,name,): #我们将超级英雄的名字和技能导入
        self.name = name
        self.__skill = 'KungFu'   
    @property                  #从这里开始
    def use_skill(self):
        return self.__skill
    @use_skill.setter
    def skill(self,skill):
        self.__skill = skill   #到这里接受

    def show(self):
        print('My name is %s, and my skill is %s'%(self.name,self.__skill))

iron = Hero('ironMan')
iron.skill = 'IonCannon'
iron.show()        

#*これらは@propertyとSET / GET ~~です 
#注プロパティが固定されているフォーマット

@property                  #从这里开始
def use_skill(self):       #定义一个函数获取私有属性
    return self.__skill
@use_skill.setter          #这里是固定格式,即上一个函数名加上.setter
def skill(self,skill):     #传入变量修改私有属性
    self.__skill = skill   #毫无尊严是私有属性!!!!

OK、今、(、これはキューブ機能である__xxx__はこれをすべきではない)、私たちは、変数名の最初の注意を払うを__xxxでなければならない必要があり、それを要約するために
加えて、いくつかの変数はアンダースコアを_xxxがありますので、全くのプライベートはありませんプライベート変数は、私たちがアクセスしていないことを属性
私たちは、このような属性は~~変更しないでヴァンドを訪問しないようにしてください見たときに川や湖は、ルールを遵守して、実際に著者はそれにアクセスするために喜んではありません
、本当にPythonの:もう一つのポイントを言語コミュニティ恥、まったくのルールが、明らかにプライベートアクセス、または直接アクセスすることができます。U•S工場•* U、と後で... '鴨プロパティ'を学習されます
============================== ===============================================
最後に、パイソンのプライベートメソッドを紹介し、それがどちらのクラスを呼び出すことによって、また、インスタンスを呼び出すことによってできる
必要性のような、と私有財産を間接的な方法の例を通してそれを取得します

class Hero(object):
    def __init__(self,name,skill): #我们将超级英雄的名字和技能导入
        self.name = name
        self.skill = skill
    def __hideskill(self):  #私有方法,我们假设他有个隐藏的技能,就是boooooo
        print('boooooooo')
    def get_hideskill(self): #通过一个方法得到另一个方法
        self.__hideskill()

iron = Hero('iIronman','IonCannon')
iron.get_hideskill()   #得到隐藏技能booooooo~

 

 

 


 


 

 

 

公開された14元の記事 ウォン称賛12 ビュー10000 +

おすすめ

転載: blog.csdn.net/Watson_Ashin/article/details/81586556