鍍金池/ 教程/ Python/ 三、類的屬性
二、Enum 的源碼
前言
一、Python 模塊簡介
一、List(列表)
五、匿名函數(shù)
三、什么是元類
二、循環(huán)語句
二、模塊的使用
三、第一個 Python 程序
線程與進程
Python
三、條件語句和循環(huán)語句綜合實例
四、對象的描述器
三、類的屬性
一、迭代
五、迭代器和生成器綜合例子
六、運算符相關(guān)的魔術(shù)方法
一、枚舉類的使用
前言
一、簡明概述
二、Python 的基本數(shù)據(jù)類型
多線程編程
五、作用域
四、包
四、枚舉的比較
四、Python 中的變量
六、類的多態(tài)
一、Python 中類也是對象
一、Python 的 Magic Method
前言
四、生成器
一、面向?qū)ο蟮母拍?/span>
五、類的繼承
二、類
二、使用 <code>type()</code> 動態(tài)創(chuàng)建類
進程
二、set
三、主模塊和非主模塊
一、字典(Dictionary)
前言
前言
前言
前言
四、集成開發(fā)環(huán)境(IDE): PyCharm
前言
四、函數(shù)的參數(shù)
三、lsit 生成式(列表生成式)
四、自定義元類
四、類的方法
二、函數(shù)傳值問題
二、注釋
一、條件語句
一、Python 語法的簡要說明
三、函數(shù)返回值
三、基本數(shù)據(jù)類型轉(zhuǎn)換
三、屬性的訪問控制
二、Python 的安裝
前言
三、命名規(guī)范
一、Python 自定義函數(shù)的基本步驟
三、自定義類型的枚舉
五、自定義容器(Container)
二、Python 迭代器
前言
二、tuple(元組)
一、Python 簡介
前言
前言
前言
二、構(gòu)造(<code>__new__</code>)和初始化(<code>__init__</code>)
前言

三、類的屬性

1、直接在類中定義屬性

定義類的屬性,當(dāng)然最簡單最直接的就是在類中定義,例如:

class UserInfo(object):
    name='兩點水'

2、在構(gòu)造函數(shù)中定義屬性

故名思議,就是在構(gòu)造對象的時候,對屬性進行定義。

class UserInfo(object):
    def __init__(self,name):
        self.name=name

3、屬性的訪問控制

在 Java 中,有 public (公共)屬性 和 private (私有)屬性,這可以對屬性進行訪問控制。那么在 Python 中有沒有屬性的訪問控制呢?

一般情況下,我們會使用 __private_attrs 兩個下劃線開頭,聲明該屬性為私有,不能在類地外部被使用或直接訪問。在類內(nèi)部的方法中使用時 self.__private_attrs。

為什么只能說一般情況下呢?因為實際上, Python 中是沒有提供私有屬性等功能的。但是 Python 對屬性的訪問控制是靠程序員自覺的。為什么這么說呢?看看下面的示例:

Python 屬性訪問控制

仔細(xì)看圖片,為什么說雙下劃線不是真正的私有屬性呢?我們看下下面的例子,用下面的例子來驗證:


#!/usr/bin/env python
# -*- coding: UTF-8 -*-

class UserInfo(object):
    def __init__(self, name, age, account):
        self.name = name
        self._age = age
        self.__account = account

    def get_account(self):
        return self.__account

if __name__ == '__main__':
    userInfo = UserInfo('兩點水', 23, 347073565);
    # 打印所有屬性
    print(dir(userInfo))
    # 打印構(gòu)造函數(shù)中的屬性
    print(userInfo.__dict__)
    print(userInfo.get_account())
    # 用于驗證雙下劃線是否是真正的私有屬性
    print(userInfo._UserInfo__account)

輸出的結(jié)果如下圖:

Python 屬性訪問控制