面向过程:功能上的封装。

面向对象:属性和行为上的封装。

类:是由N多个对象抽取出共同的属性和行为从而归纳总结出来的一种类别。

在python中一切皆对象。

 自定义数据类型的语法结构:

class 类名:
    pass

创建对象的语法格式:

对象名=类名()
class Person():
    pass

class Cat():
    pass

class Student():
    pass

p=Person()
c=Cat()
s=Student()
print(type(p))
print(type(c))
print(type(s))

类的组成

1,类属性:直接定义在类中,方法外的变量

2,实例属性:定义在__init__方法中,使用self打点的变量。

3,实例方法:定义在类中的函数,而且自带参数self。

4,静态方法:使用装饰器@staticmethod修饰的方法。

5,类方法:使用装饰器@classmethod修饰的方法。

class Student():
    # 雷属性:定义在类中,方法外的变量
    school='武汉某小学'

    # 初始化方法
    def __init__(self,name,age):  # name,age 是方法的参数,是局部变量,作用域只能在__init__方法
        self.name=name  # 左侧是实例属性,右侧是局部变量。将局部变量的值赋给实例属性
        self.age=age

    # 实例方法
    def show(self):
        print(f'学生姓名为{self.name},年龄为{self.age}')

    # 静态方法  在静态方法中不能调用实例属性和实例方法
    @staticmethod
    def static_method():
        # print(self.name) 这里调用会报错
        # self.show() 这里调用会报错
        print('这是一个静态方法,不能调用实例属性,也不能调用实例方法')

    # 类方法 在类方法中不能调用实例属性,也不能调用实例方法
    @classmethod
    def class_method(cls):
        # print(self.name) 这里调用会报错
        # self.show() 这里调用会报错
        print('这是一个类方法,不能调用实例属性,也不能调用实例方法')

#创建实例对象
stu=Student('李磊',23)
#实例属性  实例对象.实例属性名访问
print(stu.name,stu.age)
#类属性 类名.类属性名访问
print(Student.school)
#实例方法 实例对象.实例方法名访问
stu.show()
#类方法  类名.类方法名访问
Student.class_method()
#静态方法 类名.静态方法名访问
Student.static_method()

print('*'*50)

stu1=Student('张三',23)
stu2=Student('李四',24)
stu3=Student('王五',25)
stu4=Student('赵六',26)

print(type(stu1))
print(type(stu2))
print(type(stu3))
print(type(stu4))

lst=[stu1,stu2,stu3,stu4]

for item in lst:
    item.show()

动态绑定属性和方法

class Student():
    # 雷属性:定义在类中,方法外的变量
    school='武汉某小学'

    # 初始化方法
    def __init__(self,name,age):  # name,age 是方法的参数,是局部变量,作用域只能在__init__方法
        self.name=name  # 左侧是实例属性,右侧是局部变量。将局部变量的值赋给实例属性
        self.age=age

    # 实例方法
    def show(self):
        print(f'学生姓名为{self.name},年龄为{self.age}')

stu1=Student('马云',40)
stu2=Student('刘强东',50)
stu1.show()
stu2.show()

# stu2 动态添加一个属性,但这个属性是stu1不存在的
stu2.height=1.86
print(stu2.name,stu2.age,stu2.height)

def introduce():
    print('这是一个普通方法,但是动态绑定成了对象stu2的方法')

stu2.func=introduce  # 动态绑定方法 introduce不需要对括号
stu2.func()  # stu2调用方法

 

 posted on 2023-12-20 19:34  会飞的金鱼  阅读(2)  评论(0)    收藏  举报