一. python 类中的变量分为类变量,实例变量,self
# coding:utf-8
class A(object):
date = '20201215' # 类变量
def __init__(self):
self.name = 'Stephen' # 实例变量
def __str__(self):
return self.date + ' ' + self.name
new = A()
print(new)
print(new.date)
print(new.name)
20201215 Stephen
20201215
Stephen
1. 类变量
在类中方法之外定义的变量,在类中使用,不需要实例化,通过self.xx或者class.xx就可使用,实例对象可通过对象.xx进行使用。
2. 实例变量
在类中方法内定义的变量,通过self.xx就可使用,实例对象可通过对象.xx进行使用。
3. self
self就是本类对象
二. 实例方法,静态方法,类方法
class Date:
day = 10 # 类变量
def __init__(self, year, month, day): # 构造函数
self.year = year
self.month = month
self.day = day
def __str__(self):
return ("{year}-{month}-{day}").format(year=self.year, month=self.month, day=self.day)
def yesterday(Date):
Date.day -= 1
def print_year(self, number): # 实例方法
print(self.year + number)
@property
def weather(self): # 属性方法
return 'rainny'
@staticmethod # 静态方法:校验输入值类型和大小是否符合咱们的类型。
def var_str(date_str):
year, month, day = tuple(date_str.split("-"))
if 0 < int(year) and 0 < int(month) <= 12 and 0 < int(day) < 32:
return True
else:
return False
@classmethod # 类方法
def class_method(cls, date_str):
if cls.var_str(date_str): #这里是调用静态方法,注意要用cls.静态方法,原理和实例方法中的self一样,自己可以试试,否则是不能读取的。
year, month, day = tuple(date_str.split("-"))
return cls(int(year), int(month), int(day))
new_day = Date.class_method("2018-10-10")
print(new_day)
# 打印结果
2018 - 10 - 10
1. 实例方法
实例方法的是类中最常用的方法,方法本身带self参数,非本类中实例化后才能使用该方法,本类中调用实例方法通过self.xx()
2. 静态方法
- 静态方法需要加@staticmethod装饰器
- 静态方法不能调用类变量,类方法,实例变量及实例方法,但是实例方法可以调用静态方法,通过self.XX(),类方法调用静态方法也需要实例化对象后才能使用
- 静态方法调用类变量,类方法,实例变量及实例方法,需要实例化对象,然后通过对象去调取
3. 类方法
- 类方法需要加@classmethod装饰器
- 类方法无需实例化就可调用
- 在类中类方法调用实例方法和实例变量,需要先实例化类对象,然后才能调用
- 在类中类方法调用类变量,可直接通过cls.xx的方式直接调用
4. 属性方法
类属性方法无传参且必须有返回值,实例化对象调用的时候通过调取属性的方式进行调用
三. 构造函数,析构函数
class Person(): #定义类
def info(self): #实例方法
self.name='xiaoming'
print("shi li fang fa")
def __del__(self): #析构函数,类销毁自动执行
print("类销毁的时候就执行")
zwj=Person()
zwj.info()
del zwj #销毁类
print("========")
shi li fang fa
类销毁的时候就执行
========
构造函数,实例化就自动调用该方法,一般该方法会放一些属性或者初始化的东西;
析构函数,类实例被销毁的时候自动执行