类和对象
类:定义数据(属性)和行为(方法),
对象:类的实例
## 定义类
class Student:
def __init__(self,name,age):
self.name = name
self.age = age
def show(self):
print ("name:{0},age:{1}".format(self.name,self.age))
## 声明对象
stu = Student('jack','25')
stu.show()
1. 构造函数
构造函数:_init_(),用来初始化对象。创建对象时先调用类的_new_()方法创建对象,然后调用_init_()方法初始化对象。
_init_()函数第一个参数必须是self,self指的就是当前对象。
构造函数没有返回值.
2. 实例属性
实例属性是从属于实例对象的属性,也称为"实例变量"。他的使用有以下几个要点:
- 实例属性一般在__init__()方法中通过如下代码定义:
self.实例属性名=初始值
- 在本类的其他实例方法中,也是通过self进行访问
self.实例属性名
- 创建实例对象后,通过实例对象访问属性
3. 实例方法
定义实例方法时,第一个参数必须是self,self指的是当前实力对象
调用实例方法时,不需要给self传参,self由解释器自动传参。
## 定义类
class Student:
def __init__(self,name,age):
self.name = name
self.age = age
def show(self):
print ("name:{0},age:{1}".format(self.name,self.age))
## 声明对象
stu = Student('jack','25')
stu.show()
## 等价于
Student.show(stu)
4. 其他操作
dir(obj):可以获得对象的所有属性和方法
obj.dict:对象的属性字典
pass : 空语句
isinstance(对象,类):判断对象是不是属于类
class Student:
def __init__(self,name,age):
self.name = name
self.age = age
def show(self):
print ("name:{0},age:{1}".format(self.name,self.age))
## 声明对象
stu = Student('jack','25')
print(dir(stu))
print(stu.__dict__)
print(isinstance(stu,Student))
5. 类对象
类对象:“class 类名”,当解释器执行class语句时,就会创建一个类对象。类对象的类型是type
class Student:
pass
## 声明对象
print(type(Student))
Stu = Student
s1 = Stu() #创建对象
print(id(s1 ))
6. 类属性
类属性:从属于“类对象”的属性,也成为“类变量”。类属性可以被所有实例对象共享。类属性通过以下方式定义
在类的外面通过“类名.类属性”方式访问。
class 类名:类变量名=初始值
class Student:
company = "future"
card_no = 0
def __init__(self,name,age):
self.name = name
self.age = age
Student.card_no +=1
def show(self):
print ("name:{0},age:{1},no:{2}".format(self.name,self.age,Student.card_no))
## 声明对象
stu1 = Student('jack','25')
stu1.show()
stu2 = Student('rose','22')
stu2.show()
print(Student.card_no)
其中对象stu1在内存中的存储如下图所示
7. 类方法
类方法:从属于“类对象”的方法。类方法通过@classmethod来定义,格式如下:
@classmethod
def 类方法名(cls[,形参列表]):
函数体
类方法的定义需要注意以下几点
- @classmethod必须位于方法上面一行
- 第一个cls必须有,cls指的就是“类对象”本身
- 调用类方法格式:“类名.类方法名(参数列表)”,参数列表不需要也不能给cls传值
- 类方法中不能访问实例属性和实例方法
- 子类继承父类时,传入cls是子类对象,而不是父类对象。
class Student:
company = "future"
card_no = 0
def __init__(self,name,age):
self.name = name
self.age = age
Student.card_no +=1
@classmethod
def printCompany(cls):
print (cls.company)
def show(self):
print ("name:{0},age:{1},no:{2}".format(self.name,self.age,Student.card_no))
## 声明对象
stu1 = Student('jack','25')
stu1.show()
stu1.printCompany()
8. 静态方法
静态方法:与“类对象”无关的方法。静态方法通过@staticmethod来定义,不操作类的属性,和普通函数的功能一样,只是定义在了类中。
@staticmethod
def 静态方法名(参数列表):
函数体
类方法的定义需要注意以下几点
- @staticmethod必须位于方法上面一行
- 调用类方法格式:“类名.静态方法名(参数列表)”
- 类方法中不能访问实例属性和实例方法
class Student:
company = "future"
card_no = 0
def __init__(self,name,age):
self.name = name
self.age = age
Student.card_no +=1
@classmethod
def printCompany(cls):
print (cls.company)
@staticmethod
def add(a,b):
sum = a+b
print (sum)
return sum
def show(self):
print ("name:{0},age:{1},no:{2}".format(self.name,self.age,Student.card_no))
## 声明对象
stu1 = Student('jack','25')
stu1.show()
stu1.printCompany()
Student.add(1,2)
9. __call__方法和可调用对象
定义了__call__方法的对象,成为"可调用对象",即该对象像函数一样被调用。
class Student:
company = "future"
card_no = 0
def __call__(self,name,age):
self.name = name
self.age = age
def show(self):
print ("name:{0},age:{1},no:{2}".format(self.name,self.age,Student.card_no))
## 声明对象
stu1 = Student()
stu1('jack','25')
stu1.show()
拜师教育学员文章:作者:1275-李同学,
转载或复制请以 超链接形式 并注明出处 拜师资源博客。
原文地址:《Python基础系列七:面向对象》 发布于2020-09-15
评论 抢沙发