1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python中静态方法可以访问对象变量_python 面向对象-实例变量 类变量 实例方法 类

python中静态方法可以访问对象变量_python 面向对象-实例变量 类变量 实例方法 类

时间:2022-06-14 12:23:57

相关推荐

python中静态方法可以访问对象变量_python 面向对象-实例变量 类变量 实例方法 类

需要搞清楚的是,

实例方法与类方法是什么?类变量和实例变量又是什么?

类方法中如何访问类变量、类方法要如何调用?当然

实例方法中如何访问类变量?能

实例方法访问实例变量,实例方法如何被调用?当然

类方法中能否访问实例变量?不能

对象调用类方法?能

静态方法是什么?装饰器:@staticmethod

静态方法中如何访问类变量和实例变脸、静态方法如何调用?静态方法可以访问类变量、不能访问实例变量,静态方法可以用类名访问,也可以用实例(对象)访问

1、实例方法与类方法

实例方法:defdo_homework(self):类方法:def plus_sum(cls):

类变量:

name = ""

age = 0

sum1 = 1

实例变量:self.name

self.age

注意:决定一个方法是类方法还是实例方法的决定性因素是@classmethod装饰器,跟入参cls没关系。我们的self 可以用cls 代替,也可以用其他入参名代替。

#coding=utf-8

classStudent():

name= ""age=0

sum1= 1

def __init__(self,name,age): #构造函数

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): #构造函数

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): #构造函数

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): #构造函数

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): #构造函数

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): #构造函数

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): #构造函数

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、静态方法怎么定义&8、静态方法如何访问类变量、实例变量、静态方法如何被调用

同理,运用装饰器:@staticmethod

#coding=utf-8

classStudent():

name= ""age=0

sum=0def __init__(self,name,age): #构造函数

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)静态方法访问类变量:

#coding=utf-8

classStudent():

name= ""age=0

sum=0def __init__(self,name,age): #构造函数

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)#静态方法访问类变量print("this is a static method")

调用静态方法:(1)可以用类名调用、(2)可以用实例来调用

#coding=utf-8

classStudent():

name= ""age=0

sum=0def __init__(self,name,age): #构造函数

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)#静态方法访问类变量

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

静态方法访问实例变量

#coding=utf-8

classStudent():

name= ""age=0

sum=0def __init__(self,name,age): #构造函数

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)#静态方法访问类变量

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 面向对象-实例变量 类变量 实例方法 类方法 静态方法...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。