Python基础总结之初步认识---class类(下)。第十四天开始(新手可相互督促)

  昨天简单的认识类怎么定义,什么是类,类如何调用。今天的笔记会大概补充一些内容,明天的笔记会细致讲解,加深个印象即可

今天我们在了解下:类的属性,类属性属于类也属于实例化对象。也就是说类的实例化对象可以调用类属性,同样的类也可以调用。看下代码:

 1 class person(object):   #定义person()类
 2     gongtong = '吃饭'   #类属性
 3 
 4     def __init__(self):  #构造函数
 5         pass
 6 
 7 #实例化一个对象
 8 per_1 = person()
 9 print(per_1.gongtong)   #用实例化对象per_1调用类中的类属性是可以调用的
10 
11 print(person.gongtong)  #直接用类调用类属性也是可以的

  在类中,无论你写没有写构造函数,其实都是默认有一个构造函数的,构造函数可以初始化参数属性,而且类中允许有多个构造函数的存在。但是建议一个类中一个构造函数

 1 class person(object):   #定义person()类
 2 
 3     def __init__(self,name,age):  #构造函数,定义两个参数
 4         self.name=name
 5         self.age=age
 6 
 7     def __init__(self,address):  #构造函数,定义一个参数
 8         self.address=address
 9 
10 #实例化一个对象
11 per_1 = person('北京')    #如果只有一个参数,是会传给第二个构造参数的

  我们发现如果有很多参数需要传入到构造函数,我们将会很麻烦,要不在一个构造函数中添加多个参数变量,或者创建多个构造函数。这两个办法显然是不合适的,所以我们在前面的函数中讲过动态参数,也是可以用在这里的:

1 class person(object):   #定义person()类
2 
3     def __init__(self,*name):  #构造函数,*号表示动态参数
4         self.name=name
5         print(name)           #打印看下是不是传入了多个参数
6 
7 #实例化一个对象
8 per_1 = person('媛媛','红红','君君')    #构造函数中有动态关键字参数,所以我们传入多个参数都是可以的,而且是元组形式返回

再看一个小案例:

 1 class person(object):
 2     def __init__(self,**kwargs):  #动态参数,在参数很多的时候,动态参数是很好用哦
 3         self.kwargs = kwargs
 4 
 5     def info(self):
 6         print(list(self.kwargs.values())[0])    #python3中values()方法,是以迭代器形式返回的列表,所以去元素需要用list转换下
 7 
 8 per_1 = person(name = 'liu')
 9 per_1.info()                      #调用内部info()函数
10 
11 per_2 = person(name = 'hong',age = 18)
12 per_2.info()

接下来我们认识下什么是【析构函数】,析构函数的执行顺序大家一定要注意哦:

实例化对象后,先被执行的是:类的构造函数(初始化),--->执行:开始调用某个方法函数 ---》执行:具体调用的方法内部代码块儿---》最后执行:析构函数
我们看下代码的实现:
 1 class person(object):
 2 
 3     def __init__(self):
 4         print('我是构造函数')   #会第一个打印它的内容
 5 
 6     def __del__(self):
 7         print('我是析构函数')  #会最后打印析构函数的内容,析构函数不论执行
 8 
 9     def info_A(self):
10         print('我是方法A')   #会第二个执行被调用方法的内容
11 
12 per_1 = person()
13 per_1.info_A()

 前面的几个小案例中,类中的方法都是普通方法,比如:

 1 class person(object):
 2     def conn(self,user,passwd,host,port):
 3         pass
 4 
 5     def f1(self,*args,**kwargs):    #动态参数
 6 
 7     def info(self):
 8         print('普通方法')
 9 
10 per = person()
11 per.conn('liu','123','9898','100')
12 per.f1('liu','123')#因为是动态参数,所以传多少个都可以

info()就是我写的一个很普通的方法,类中还有特性方法、静态方法以及类方法。笔记如下:

特性方法: @property 

特性方法:特性方法不能有形式参数,所以调用的时候不需要括号
1 class person(object):
2     @property          #表示特性方法
3     def getuserid(self):
4         pass
5 per=person()
6 per.getuserid    #特性方法不需要加括号,不然会报异常per.getuserid(),这个括号不需要哦

静态方法: @staticmethod

静态方法:直接使用类名来进行调用,他属于类。调用的时候不需要实例化.
实例化对象后,也可以调用,但是不建议哦 。
1 class person(object):
2     @staticmethod     #表示静态方法
3     def conn(self):
4         print('我是静态方法,调用我不需要括号')
5 
6 print(person.conn('liu'))

最后大家看下类方法:

类方法:直接使用类来进行调用,属于类
1 class person(object):
2     @classmethod  #表示类方法
3     def conn(cls):
4         pass

简单的总结:

类属性:
类属性---》特性方法不能有形式参数,所以调用的时候不需要括号
静态方法----》直接使用类名来进行调用,他属于类。调用的时候不需要实例化.
类方法 ---》直接使用类来进行调用,属于类

属于对象:
实例属性
普通方法
特性方法

猜你喜欢

转载自www.cnblogs.com/woshidaliua/p/11312435.html