调用类方法时,类名带括号和不带括号的区别

2026-01-30 15:00:05 9878

终于弄明白了

类的定义

class定义类,与函数的定义def相似,空格跟类名

类名一般都是首字母大写,“驼峰命名法”,首个单词字母大写。

类名后面可以加括号,也可以不加,默认都是继承object类。

变量名,都是小写。单词之间下划线隔开

python中类的定义语法如下:

class 类名:

pass

类的三要素:①类名②属性---变量 ③方法---函数

类属性:定义在类方法之外类方法:类中定义的函数类属性的访问:类名.属性名类方法的调用:类名.方法名

注意:(重点)

实例对象可以访问类属性实例属性有独立内存空间类不能访问实例属性类不能访问实例方法(实例方法名后带(self))实例对象不能访问类方法(类方法名后面只有空括号())示例 :

class Teacher:

name = "鲁班" # 类属性

def age():

print('我要上王者')

Teacher.name = "李白" # 改变类的属性

Teacher.name2 = '典韦' # 类外--添加类属性

print(Teacher.name2)

t = Teacher() # 创建一个Teacher()的实例t

Teacher.age() # 调用Teacher类的方法

print(Teacher.name) # 调用Teacher类的属性

print(t.name) #实例对象可以访问类属性

#t.age() #错误 实例对象不能访问类方法

print('Teachar.name的id:%d'%id(Teacher.name))

print('t.name为改变前的id:%d'%id(t.name))

t.name = "妲己"

print('t.name改变后的id:%d'%id(t.name))

执行结果:

典韦

我要上王者

李白

李白

Teachar.name的id:2756328801008

t.name为改变前的id:2756328801008

t.name改变后的id:2756328801184

类的实例化

实例化是由抽象到具体的过程

定义:实例名 = 类名()

类是实例的工厂,类提供的是母版

实例是一个独立存放变量的空间

例如:

1 class Car:

2 boon = 4

3 audi = Car() # 实例化出来的对象

4 bmw = Car()

5 audi.boon = 5 #对象添加的属性,空间是独立的,其他的访问不到

6 print(audi.boon)

7 print(bmw.boon)

8

9 执行结果:

10 5

11 4

方法

封装在类里的一种特殊的函数

示例:

1 class Hero:

2 name = '鲁班'

3 def run(self): # self 就是一个参数 代表 实例本身 约定俗成self

4 print('五连绝世')

5

6 str = Hero() # 实例化对象

7 str.run() # ok 实例化调用方法

8 Hero.run(str)

9 #Hero.run() #错误 类不能调用实例方法

10 print('%s拿了五杀'%str.name)

11 print('%s拿了五杀'%Hero.name)

12

13 执行结果:

14 五连绝世

15 五连绝世

16 鲁班拿了五杀

17 鲁班拿了五杀

这里有了个问题,加了self有什么作用?self:代表实例本身 ,加了self代表实例方法,没self代表类方法

了解:魔法方法

dir(对象) 查看对象所有的魔法方法

带两个下划线的 叫做魔法方法 有特殊的作用 它们的调用时由python解释器去调用的每一个方法调用的时机都是不一样的 不需要手动调用。

构造方法初始化

以双下划线开头且以双下划线结尾的固定方法,他们会在特定的时机被触发执行,__init__就是其中之一,它会在实例化之后自动被调用,以完成实例的初始化。

示例:

1 class Hero:

2 def __init__(self,name): #两个下划线,初始化方法

3 self.name = name

4 def state(self): #在Hero类中定义state方法

5 print('%s又没了'%self.name) #调用实例wum的name属性

6

7 wum = Hero('鲁班') #实例化时需要传一个参数

8 wum.state() #调用state方法

9

10 执行结果:

11 鲁班又没了

init参数传递过程:实例化产生一个类的实例—>python自动调用实例.init(参数)—>转换为类.init(实例,参数)