搜尋
首頁後端開發Python教學举例讲解Python面相对象编程中对象的属性与类的方法

python 对象的属性
进入正题,来看一个实例来了解python中类,对象中公有属性,私有属性及局部变量,全局变量的区别.

root@10.1.6.200:~# cat object.py 
#!/usr/bin/env python
#coding:utf8
 
class Dave():
  var1 = "class atribute,public atrribute var1" #类属性,公有属性var1
  __var2 = "class self atribute __var2"  #类的私有属性__var2
 
  def fun(self):
    self.var2 = "object public atrribute var2" #对象的公有属性var2
    self.__var3 = "object self atrribute __var3" #对象的私有属性__var3
    var4 = "Function of the local variable var4" #函数fun的局部变量
   
  def other(self):
    print self.__var3

根据上面代码后面加入以下代码可以实例化一个对象及获取类公有属性.

he = Dave()    #实例化一个对象he
print he.var1   #从实例中获取类的公有属性
print Dave.var1  #直接从类中获取公有属性

root@10.1.6.200:~# ./object.py 
class atribute,public atrribute var1
class atribute,public atrribute var1

类的私有属性不能被类或对象直接调用

he = Dave()
print Dave.__var2
print he.__var2

root@10.1.6.200:~# ./object.py 
Traceback (most recent call last):
 File "./object.py", line 19, in <module>
  print Dave.__var2
AttributeError: class Dave has no attribute '__var2'

但可以通过方法间接调用.

class Dave():
  var1 = "class atribute,public atrribute var1" #类属性,公有属性var1
  __var2 = "class self atribute __var2"  #类的私有属性__var2
   
  def other(self):
    print Dave.__var2   
 
he = Dave()
he.other()

root@10.1.6.200:~# ./object.py 
class self atribute __var2

获取类方法中的对象的公有属性,需要先通过对象执行类中的方法.并通过对象调用该属性.

he = Dave()
liu = Dave()
he.fun()
print he.var2
print liu.var2

root@10.1.6.200:~# ./object.py 
object public atrribute var2
Traceback (most recent call last): <span></span>       #对象liu由于没有调用fun方法所有就没有该属性.
File "./object.py", line 20, in <module>
  print liu.var2
AttributeError: Dave instance has no attribute 'var2'

对象的私有属性和类的私有属性类似,也不能被类或对象直接调用

he = Dave()
he.fun()
print he.__var3

root@10.1.6.200:~# ./object.py 
Traceback (most recent call last):
 File "./object.py", line 18, in <module>
  print he.__var3
AttributeError: Dave instance has no attribute '__var3'

局部变量也不能被对象直接调用,可以在函数内部使用.

he = Dave()
he.fun()
print he.var4

root@10.1.6.200:~# ./object.py 


Traceback (most recent call last):
 File "./object.py", line 18, in <module>
  print he.var4
AttributeError: Dave instance has no attribute 'var4'

  def fun(self):
    self.var2 = "object public atrribute var2" #对象的公有属性var2
    self.__var3 = "object self atrribute __var3" #对象的私有属性__var3
    var4 = "Function of the local variable var4" #函数fun的局部变量
    print var4       #可以在函数内部直接打印,只在该函数内有用
    print self.__var3
 
he = Dave()
he.fun()

root@10.1.6.200:~# ./object.py 
Function of the local variable var4
object self atrribute __var3

那么var4和self._var3有什么区别呢.目前看2个都在外部使用不了.下面在定义一个函数other调用.

  def fun(self):
    self.var2 = "object public atrribute var2" #对象的公有属性var2
    self.__var3 = "object self atrribute __var3" #对象的私有属性__var3
    var4 = "Function of the local variable var4" #函数fun的局部变量
    print var4       #一个函数的局部变量在另外一个函数是访问不到的
    print self.__var3
   
  def other(self):
    print var4
    print self.__var3
 
he = Dave()
he.fun()
print "#"*100
he.other()

root@10.1.6.200:~# ./object.py 
Function of the local variable var4
object self atrribute __var3
####################################################################################################
Traceback (most recent call last):   #会认为var4是全局变量打印.定义全局变量可在class 头加入 var4 = "global"
 File "./object.py", line 22, in <module>
  he.other()
 File "./object.py", line 16, in other
  print var4
NameError: global name 'var4' is not defined

#!/usr/bin/env python
#coding:utf8
var4 = "global"            #定义var4为全局变量
class Dave():
  var1 = "class atribute,public atrribute var1" #类属性,公有属性var1
  __var2 = "class self atribute __var2"  #类的私有属性__var2
 
  def fun(self):
    self.var2 = "object public atrribute var2" #对象的公有属性var2
    self.__var3 = "object self atrribute __var3" #对象的私有属性__var3
    var4 = "Function of the local variable var4" #函数fun的局部变量
    print var4
    print self.__var3
   
  def other(self):
    print var4
    print self.__var3       #可调用私有属性,前提是先调用fun
 
he = Dave()
he.fun()
print "#"*100
he.other()

root@10.1.6.200:~# ./object.py 
Function of the local variable var4
object self atrribute __var3
####################################################################################################
global
object self atrribute __var3

python 类的方法
python类中的方法:公有方法,私有方法,类方法,静态方法.

下面通过一个实例了解它们之间的区别:

#!/usr/bin/env python
#coding:utf8
class Dave():
  name = "python"
 
  def fun1(self):        #定义公有方法
    print self.name
    print "i am public method"
 
  def __fun2(self):       #定义私有方法
    print self.name
    print "i am self method"

先来看公有方法和私有方法,加入以下代码输出

root@10.1.6.200:~# ./method.py    #直接调用对象公有方法没有问题

python
i am public method

私有方法和私有属性一样是被保护起来,不能直接调用对象的私有方法,但可以间接调用.

#!/usr/bin/env python
#coding:utf8
class Dave():
  name = "python"
 
  def fun1(self):        #定义公有方法
    print self.name
    print "i am public method"
    self.__fun2()
 
  def __fun2(self):       #定义私有方法
    print self.name
    print "i am self method"
 
he = Dave()
he.fun1()

root@10.1.6.200:~# ./method.py 
python
i am public method
python
i am self method

公有属性是可以被类调用,但是公有方法是不可以被类直接调用.需要实例化对象调用.如果想一个方法被类直接调用的话,就需要转换,变成一个类方法.变成类方法有2种,比较简单的可以加装饰器.

  @classmethod
  def classFun(self):      #定义类方法
    print self.name
    print "i am class method"
 
Dave.classFun()

root@10.1.6.200:~# ./method.py 
python
i am class method

另一个方法比较麻烦,需要定义一个新的函数,以及使用classmethod方法转换函数为类方法.当然调用也需要使用新的该函数名字.

  def classFun(self):      #定义类方法
    print self.name
    print "i am class method"
 
  classnewFun = classmethod(classFun)
 
 
Dave.classnewFun()       #被转换后的是一个类方法,原来classfun还是一个普通方法

root@10.1.6.200:~# ./method.py 
python
i am class method

静态方法在使用中和类方法一样,也是为了让类中直接调用,区别定义时不加self.

  @staticmethod
  def staticFun():       #d定义静态方法
    print Dave.name #注意不加self,直接打name也不行,会认为调用全局变量,需要使用类型加属性.
    print "i am static method"
 
Dave.staticFun()
oot@10.1.6.200:~# ./method.py 
python
i am static method

同样也可以通过一个函数调用

  def staticfun():       #定义静态方法
    print Dave.name
    print "i am static method"
 
  staticnewFun = staticmethod(staticFun)
 
Dave.staticnewFun()

root@10.1.6.200:~# ./method.py 
python
i am static method
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
详细讲解Python之Seaborn(数据可视化)详细讲解Python之Seaborn(数据可视化)Apr 21, 2022 pm 06:08 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

详细了解Python进程池与进程锁详细了解Python进程池与进程锁May 10, 2022 pm 06:11 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

Python自动化实践之筛选简历Python自动化实践之筛选简历Jun 07, 2022 pm 06:59 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

归纳总结Python标准库归纳总结Python标准库May 03, 2022 am 09:00 AM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于标准库总结的相关问题,下面一起来看一下,希望对大家有帮助。

分享10款高效的VSCode插件,总有一款能够惊艳到你!!分享10款高效的VSCode插件,总有一款能够惊艳到你!!Mar 09, 2021 am 10:15 AM

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

Python数据类型详解之字符串、数字Python数据类型详解之字符串、数字Apr 27, 2022 pm 07:27 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

python中文是什么意思python中文是什么意思Jun 24, 2019 pm 02:22 PM

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。

详细介绍python的numpy模块详细介绍python的numpy模块May 19, 2022 am 11:43 AM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
1 個月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器