python基础--07 类与对象

1.面向对象与面向过程

 2.类与对象

3.类的创建 

class Student: #Student为类名称 命名单词首字符大写 其余小写
    pass
#只定义空类是开空间的
print(id(Student))
print(type(Student))
print(Student)
'''
运行结果:
2274664763304
<class 'type'>
<class '__main__.Student'>
'''

class Student: #Student为类名称 命名单词首字符大写 其余小写
    name = 'long' #1.在类中定义的变量 称为类属性
    def eat(self):  #2.类中的函数成为实例方法 第一个参数为self
        print("学习吃饭")
    @staticmethod
    def method():
        print("用@staticmethod进行修饰") #3.用@staticmethod修饰称为静态方法 第一个参数不是self
    @classmethod
    def cm(cls):
        print("用@classmethod") #4.用用@classmethod修饰成为类方法  第一个参数是cls
    def __init__(self,id,age): #5.self.id称为实例属性 进行一个赋值操作 将局部变量的值(id)赋给实例属性 名字可以不一样
        self.id = id
        self.age =age
'''
上面相当于一个学生类模板(理解成模板很重要) 有这个对象就可以造相似的对象
'''

 4.对象的创建(先要有类)

 为什么这个对象就一定能知道是Student创建的呢 原因就是有类指针。对于上面的类与对象的图

是理解类与对象的关键。

class Student: #Student为类名称 命名单词首字符大写 其余小写
    name = 'long' #1.在类中定义的变量 称为类属性
    def eat(self):  #2.类中的函数成为实例方法 第一个参数为self
        print("学习吃饭")
    @staticmethod
    def method():
        print("用@staticmethod进行修饰") #3.用@staticmethod修饰称为静态方法 第一个参数不是self
    @classmethod
    def cm(cls):
        print("用@classmethod") #4.用用@classmethod修饰成为类方法  第一个参数是cls
    def __init__(self,id,age): #5.self.id称为实例属性 进行一个赋值操作 将局部变量的值(id)赋给实例属性 名字可以不一样
        self.id = id
        self.age =age

#创建类对象
stu1 = Student('long',25)
print(id(stu1))   #类对象的内存地址
print(type(stu1))
print(stu1)   
print('---------------------')
print(id(Student)) #类的地址
print(type(Student))
print(Student)
class Student: #Student为类名称 命名单词首字符大写 其余小写
    name = 'long' #1.在类中定义的变量 称为类属性
    def eat(self):  #2.类中的函数成为实例方法 第一个参数为self
        print("学习吃饭")
    @staticmethod
    def method():
        print("用@staticmethod进行修饰") #3.用@staticmethod修饰称为静态方法 第一个参数不是self
    @classmethod
    def cm(cls):
        print("用@classmethod") #4.用用@classmethod修饰成为类方法  第一个参数是cls
    def __init__(self,id,age): #5.self.id称为实例属性 进行一个赋值操作 将局部变量的值(id)赋给实例属性 名字可以不一样
        self.id = id
        self.age =age

#创建类对象
stu1 = Student('long',25)
stu1.eat()  #对象名.方法名
print(stu1.id)
print(stu1.age)
print('-------------------------------')
Student.eat(stu1)  #与54行的代码功能相同 都是调用Student的方法
                   #类名.方法(类的对象)--->实际就是方法定义处的self

5.类属性,类方法,静态方法

class Student: #Student为类名称 命名单词首字符大写 其余小写
    name = 'long' #1.在类中定义的变量 称为类属性
    def eat(self):  #2.类中的函数成为实例方法 第一个参数为self
        print("学习吃饭")
    @staticmethod
    def method():
        print("用@staticmethod进行修饰") #3.用@staticmethod修饰称为静态方法 第一个参数不是self
    @classmethod
    def cm(cls):
        print("用@classmethod") #4.用用@classmethod修饰成为类方法  第一个参数是cls
    def __init__(self,id,age): #5.self.id称为实例属性 进行一个赋值操作 将局部变量的值(id)赋给实例属性 名字可以不一样
        self.id = id
        self.age =age

#创建类对象
#1.类属性的调用
print(Student.name)
stu1 = Student(123,23)
stu2 = Student(122,20)
print('------------类属性值---------------')
print(stu1.name)
print(stu2.name)
print('------------id值----------------')
print(id(stu1))
print(id(stu1.name))
print(id(stu2.name))
print('-------------区分--------------')
print('改变类属性后:')
stu1.name = 'yu'
print('------------id值----------------')
print(id(stu1))
print(id(stu1.name))
print(id(stu2.name))
print('------------类属性值---------------')
print(Student.name)
print(stu1.name)
print(stu2.name)
#2.类方法的调用
Student.cm() #cls参数不需要自己传
#3.静态方法的调用
Student.method()

'''
运行结果:
long
------------类属性值---------------
long
long
------------id值----------------
2396617996216
2396616483816
2396616483816
-------------区分--------------
改变类属性后:
------------id值----------------
2396617996216
2396617281752
2396616483816
------------类属性值---------------
long
yu
long
用@classmethod
用@staticmethod进行修饰
'''

 6.动态绑定属性与方法

 

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def eat(self):
        print(self.name + '在吃饭')
#创建对象1
stu1 = Student('张三', 20)
#创建对象2
stu2 = Student('李四', 30)

动态绑定属性与方法:

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def eat(self):
        print(self.name + '在吃饭')
#创建对象1
stu1 = Student('张三', 20)
#创建对象2
stu2 = Student('李四', 30)
print(id(stu1))
print(id(stu2))
print('-----------------为对象动态绑定属性-------------------')
stu1.gender = '女'
print(stu1.name, stu1.age,stu1.gender)
print(stu2.name, stu2.age)
#name ,age 是两个对象所共享的 而gender是stu1独有的
stu1.eat()
stu2.eat()
print('-----------------为对象动态绑定方法-------------------')
def stuy():
    print("stuy")
stu2.stuy =stuy
stu2.stuy()
#eat是两个对象所共享的 而stuy是stu2独有的

7.总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值