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独有的