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

终于弄明白了

类的定义

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

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

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

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

python中类的定义语法如下:

class 类名:
    pass    

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

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

注意:(重点)

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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(实例,参数)

 

posted @   lulu晶  阅读(835)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示