python中静态方法可以访问对象变量_python 面向对象-实例变量、类变量、实例方法、类方法、静态方法...
需要搞清楚的是,
實例方法與類方法是什么?類變量和實例變量又是什么?
類方法中如何訪問類變量、類方法要如何調用?當然
實例方法中如何訪問類變量?能
實例方法訪問實例變量,實例方法如何被調用?當然
類方法中能否訪問實例變量?不能
對象調用類方法?能
靜態(tài)方法是什么?裝飾器:@staticmethod
靜態(tài)方法中如何訪問類變量和實例變臉、靜態(tài)方法如何調用?靜態(tài)方法可以訪問類變量、不能訪問實例變量,靜態(tài)方法可以用類名訪問,也可以用實例(對象)訪問
1、實例方法與類方法
實例方法:defdo_homework(self):類方法:def plus_sum(cls):
類變量:
name = ""
age = 0
sum1 = 1
實例變量:self.name
self.age
注意:決定一個方法是類方法還是實例方法的決定性因素是@classmethod裝飾器,跟入?yún)ls沒關系。我們的self 可以用cls 代替,也可以用其他入?yún)⒚妗?/p>
#coding=utf-8
classStudent():
name= ""age=0
sum1= 1
def __init__(self,name,age): #構造函數(shù)
self.name =name
self.age=agedefdo_homework(self):#實例方法print(self.name +"do homework")
@classmethoddefplus_sum(cls):pass
2、類方法如何訪問類變量;類方法如何調用
#coding=utf-8
classStudent():
name= ""age=0
sum=0def __init__(self,name,age): #構造函數(shù)
self.name =name
self.age=agedef do_homework(self):#實例方法
print(self.name +"do homework")
@classmethoddef plus_sum(cls):#類方法
cls.sum+=1#類方法訪問類變量
print(cls.sum)
student1= Student("a",18)
Student.plus_sum()#類方法調用,用類名調用類方法
student2 = Student("b",19)
Student.plus_sum()
student3= Student("c",20)
Student.plus_sum()#[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test6.py"#1#2#3
3、實例方法訪問類變量
直接訪問sum1,報錯
#coding=utf-8
classStudent():
name= ""age=0
sum1=0def __init__(self,name,age): #構造函數(shù)
self.name =name
self.age=ageprint(sum1)#直接訪問,報錯defdo_homework(self):print(self.name +"do homework")
student1= Student("ansonw",26)
student1.do_homework()print(Student.__dict__)#Project/python_ToolCodes/test6.py"#Traceback (most recent call last):#File "/Users/anson/Documents/Project/python_ToolCodes/test6.py", line 15, in #student1 = Student("ansonw",26)#File "/Users/anson/Documents/Project/python_ToolCodes/test6.py", line 10, in __init__#print(sum1)#NameError: global name 'sum1' is not defined
需要怎么訪問呢:在類方法中,訪問類變量,需要 采用內置變量__class__ 和關鍵字print(self.__class__.sum1)或者是print(self.sum1) 都可以訪問,只是我認為,后面一種訪問方法,是用當前對象訪問的對象屬性,不是類變量;__class__ 代指當前類
#coding=utf-8
classStudent():
name= ""age=0
sum1=0def __init__(self,name,age): #構造函數(shù)
self.name =name
self.age=age#print(sum1)
print(self.__class__.sum1)#正確的訪問方式defdo_homework(self):print(self.name +"do homework")#student1 = Student("ansonw",26)#student1.do_homework()
print(Student.__dict__)#[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test6.py"#0#ansonwdo homework#{'__module__': '__main__', 'do_homework': , 'name': '', 'age': 0, 'sum1': 0, '__doc__': None, '__init__': }
4、實例方法訪問實例變量,實例方法如何被調用?
#coding=utf-8
classStudent():
name= ""age=0
sum=0def __init__(self,name,age): #構造函數(shù)
self.name =name#實例方法訪問實例變量
self.age=agedef do_homework(self):#實例方法
print("name:"+self.name)#實例方法訪問實例變量print("this is a object function")
@classmethoddef plus_sum(cls):#類方法
cls.sum+=1
print(cls.sum)print(self.name)
@staticmethoddefadd(x,y):print(x+y)print("this is a static method")
student1= Student("anson",19)
student1.do_homework()#實例方法被調用(被對象調用)#[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test6.py"#name:anson#this is a object function
5、類方法中能否訪問實例變量?
#coding=utf-8
classStudent():
name= ""age=0
sum=0def __init__(self,name,age): #構造函數(shù)
self.name =name
self.age=agedef do_homework(self):#實例方法
print(self.name +"do homework")
@classmethoddef plus_sum(cls):#類方法
cls.sum+=1
print(cls.sum)print(self.name)
@staticmethoddefadd(x,y):print(x+y)print("this is a static method")
student1= Student("anson",19)
student1.plus_sum()
Student.plus_sum()
報錯
[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test6.py"
1Traceback (most recent call last):
File"/Users/anson/Documents/Project/python_ToolCodes/test6.py", line 25, in student1.plus_sum()
File"/Users/anson/Documents/Project/python_ToolCodes/test6.py", line 16, inplus_sumprint(self.name)
NameError:global name 'self' is not defined
6、對象調用類方法:
student1.plus_sum()
雖然可以,但是,最好還是不要,因為不倫不類的
#coding=utf-8
classStudent():
name= ""age=0
sum=0def __init__(self,name,age): #構造函數(shù)
self.name =name
self.age=agedef do_homework(self):#實例方法
print(self.name +"do homework")
@classmethoddef plus_sum(cls):#類方法
cls.sum+=1
print(cls.sum)
student1= Student("a",18)
student1.plus_sum()
Student.plus_sum()
student2= Student("b",19)
Student.plus_sum()
student3= Student("c",20)
Student.plus_sum()
7、靜態(tài)方法怎么定義&8、靜態(tài)方法如何訪問類變量、實例變量、靜態(tài)方法如何被調用
同理,運用裝飾器:@staticmethod
#coding=utf-8
classStudent():
name= ""age=0
sum=0def __init__(self,name,age): #構造函數(shù)
self.name =name
self.age=agedef do_homework(self):#實例方法
print(self.name +"do homework")
@classmethoddef plus_sum(cls):#類方法
cls.sum+=1
print(cls.sum)
@staticmethoddefadd(x,y)pass
(1)靜態(tài)方法訪問類變量:
#coding=utf-8
classStudent():
name= ""age=0
sum=0def __init__(self,name,age): #構造函數(shù)
self.name =name
self.age=agedef do_homework(self):#實例方法
print(self.name +"do homework")
@classmethoddef plus_sum(cls):#類方法
cls.sum+=1
print(cls.sum)
@staticmethoddefadd(x,y)print(Student.sum)#靜態(tài)方法訪問類變量print("this is a static method")
調用靜態(tài)方法:(1)可以用類名調用、(2)可以用實例來調用
#coding=utf-8
classStudent():
name= ""age=0
sum=0def __init__(self,name,age): #構造函數(shù)
self.name =name
self.age=agedef do_homework(self):#實例方法
print(self.name +"do homework")
@classmethoddef plus_sum(cls):#類方法
cls.sum+=1
print(cls.sum)
@staticmethoddefadd(x,y):print(Student.sum)#靜態(tài)方法訪問類變量
print("this is a static method")
Student.add(1,2)#(1)可以用類名調用
student1= Student("anson",19)
student1.add(1,2)#(2)可以用實例來調用#[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test6.py"#0#this is a static method#0#this is a static method
靜態(tài)方法訪問實例變量
#coding=utf-8
classStudent():
name= ""age=0
sum=0def __init__(self,name,age): #構造函數(shù)
self.name =name
self.age=agedef do_homework(self):#實例方法
print(self.name +"do homework")
@classmethoddef plus_sum(cls):#類方法
cls.sum+=1
print(cls.sum)
@staticmethoddefadd(x,y):#print(Student.sum)#靜態(tài)方法訪問類變量
print(self.name)print("this is a static method")
Student.add(1,2)
student1= Student("anson",19)
student1.add(1,2)
報錯
#[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test6.py"#Traceback (most recent call last):#File "/Users/anson/Documents/Project/python_ToolCodes/test6.py", line 22, in #Student.add(1,2)#File "/Users/anson/Documents/Project/python_ToolCodes/test6.py", line 19, in add#print(self.name)#NameError: global name 'self' is not defined
總結
以上是生活随笔為你收集整理的python中静态方法可以访问对象变量_python 面向对象-实例变量、类变量、实例方法、类方法、静态方法...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual Studio 2017新版
- 下一篇: python编程财务应用_Python笔