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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值