?类的创建
class Student: #类名称首字母大写,其余小写。
pass
print(id(Student)) #1719467888672
print(type(Student)) #<class 'type'>
print(Student) #<class '__main__.Student'>
?类的组成:类属性、实例方法、静态方法、类方法
class Student:
name = 'zyf' #直接写在类里变量,称为类属性
def __init__(self,age,name): #self name为实体属性,进行了一个赋值操作,将局部变量的name值赋值给了实体属性
self.name = name
#实例方法
def eat(self):
print('学生在吃饭。。。。')
#静态方法
@staticmethod
def drink():
print('这是一个静态方法,因为使用了staticmethod修饰')
#类方法
@classmethod
def cm(cls):
print('这是一个类方法,因为使用了classmethod修饰')
类的属性:所有实例值都相同的属性,类属性是在类级别定义的,不是在构造方法__init__()内部定义的
实例属性:是附加到类实例的属性,在构造方法中定义。可以使用点表示法法访问和设置实例属性。
实例化类:(构造函数的创建)
在python中,实例化一个类的新实例时,会自动调用_init_()构造方法。构造方法是完成实例初始化的魔法方法,可以用初始化某些变量。
1.无参数构造方法语法格式
class 类名(object):
def __init__(self): #构造方法
self.xx=yy # 实例属性
2.有参数构造方法语法格式
class 类名(object):
def __init__(self,参数1,参数2): #构造方法
self.xx=参数1 #实例属性
self.xxx=参数2 #实例属性
class Student:
age = 18
def __init__(self,name,top,id ='12',):
self.name = name
self.top = top
self.id = id
a = Student('xiaoming',180)
b = Student('xiaohong',166,'13')
print(a.name)
print(a.top)
print(a.id)
print(a.age)
print('=========')
print(b.id)
?xiaoming 180 12 18 ========= 13
class Student:
age = 18
def __init__(self):
self.name = 'xiaoming'
self.top = 188
self.id = 12
a = Student()
print(a.name,a.top,a.id)
xiaoming 188 12
self :
- self是在为class编写instance method的时候,放在变量名第一个位子的占位词。
- 在具体编写instance method里,可以不使用self这个变量。
- 如果在method里面要改变instance的属性,可以用self.xxxx来指代这个属性进行修改。
- self是一个对象,他代表实例化的自身变量。
- self中的变量和含有self参数的函数可以在类中任意一个函数内随意调用。
- 非函数中定义的变量在定义的时候不用self。
class Student(object):
name = None
age = None
def run(self):
print(f'{self.name}在奔跑') #以 f开头表示在字符串内支持大括号内的python表达式
def jump(self):
print(f'{self.name}在跳跃')
def work(self):
self.run() #self是类中属性和方法的桥梁,绑定了self的方法都可以使用self.来调用
self.jump()
def sleep():
print('sleep')
xiaom = Student()
xiaom.name = 'xiaomu' #给实例化对象xiaom属性赋值
xiaom.jump() #通过实例化 对象名.方法()来调用jump方法
xiaom.run() #通过实例化 对象名.方法()来调用run方法
dewei = Student()
dewei.run()
dewei.top = 184
print(dewei.top) #成功打印说明这个属性成功添加到了dewei这个实例上
#print(xiaom.top) 'Student' object has no attribute 'top'
#实例化对象可以自定义属性,每个实例化对象定义的属性和其他实例化对象不通用
print('-----------')
xiaom.work()
#xiaom.sleep() #类型错误
#sleep() 从外部调用
?xiaomu在跳跃 xiaomu在奔跑 None在奔跑 184 ----------- xiaomu在奔跑 xiaomu在跳跃
class Student(object):
name = None
age = None
def run(self):
print(f'{self.name}在奔跑') #以 f开头表示在字符串内支持大括号内的python表达式
def jump(self):
print(f'{self.name}在跳跃')
def sleep():
print('sleep')
def work(self):
self.run() #self是类中属性和方法的桥梁,绑定了self的方法都可以使用self.来调用
self.jump()
sleep()
xiaom = Student()
xiaom.work()
报错
在类的代码块中必须添加self,否则无法调用
有一种方法可以用类函数调用没有self参数的函数,即在一个函数中定义一个函数,且只能在该函数中调用。
class Student(object):
name = 'XIAOMU'
age = None
def work(self):
def sleep(name):
return name
result = sleep(self.name)
print('在睡觉的人是',result)
xiaomu = Student()
xiaomu.work()
在睡觉的人是 XIAOMU
类中function可以调用全局函数?
def sleep(name):
return name
class Student(object):
name = 'XIAOMU'
age = None
def work(self):
def sleep(name):
return name
result = sleep(self.name)
print('在睡觉的人是',result)
xiaomu = Student()
xiaomu.work()
?对象的生命周期
?
?私有函数和私有变量?
1.无法被实例化对象调用的类中的函数和变量。
2.类内部可以调用私有函数和变量。
3希望类内部业务调用,不希望被使用者调用。
私有函数和变量的定义方法
在变量和函数前加两个下横线__ ,变量或函数名后无需添加。若左右都添加了下横线,则成了内置函数的定义。
python中的封装
class Student(object):
def __hallo(self,data):
print('hallo %s'% data)
def halloworld(self):
self.__hallo('world')
xiaoming = Student()
xiaoming.halloworld()
hallo world
|