前言
# 编程语言 面向过程 and 面向对象
# 面向过程 -----> 分析问题,解决问题的步骤
# 面向对象 -----> 抽象,姑且称为解决问题的方法
# 面向对象的两个基本概念 ----> 类和对象
# 类:
# ----> 具有相同属性和方法的对象的集合,定义集合中对象所共有的属性和方法 , 对象是类的实例
# 对象:
# ----> 类的实例
# 三大特性: 继承、多态、封装
# 继承: 子类继承父类的字段和方法 ----> 狗来自动物,
# 多态: 不同类型的变量进行相同的操作,根据类(对象)的不同表现出不同的行为
# 封装: 抽象得到的数据和行为(或功能)相结合,形成一个有机的整体(即类);封装的目的是增强安全性
# 和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员
类的理解
简单粗暴 类 == 变量+函数 (类中叫属性和方法)
class my_A():
# 变量 (类中叫属性)
val1 = "济南"
val2 = "青岛"
val3 = "烟台"
# 函数 (类中叫方法)
def fun1(self):
print("我是济南")
def fun2(self):
print("我是青岛")
def fun3(self):
print("我是烟台")
# 创建对象
myA = my_A()
# 调用方法 类.方法名
myA.fun3()
# 调用方法 类.属性名
print(myA.val3)
类方法调用类属性,方法的调用 不使用classmethod声明func1是类方法,则报错
注意,这里是直接调用类方法,没有实例化
# 直接使用类
# 类方法调用类属性 classmethod
class my_A():
val1 = "济南"
@classmethod
def fun1(cls):
print("我是济南", cls.val1)
# print("dwshi:"+str(age))
my_A.func1()
# MY = my_A()
# MY.fun1(23)
修改类属性,方法内部修改
class Myclass:
val = "济南"
# @classmethod
def func(self, ):
print("我是:", self.val)
self.val = input("请输入修改后的值")
print("我是:", self.val)
self.val1 = input("加入新的值")
print("我是新的值:", self.val1)
a = Myclass()
a.func()
结果
我是: 济南
请输入修改后的值 烟台
我是: 烟台
加入新的值青岛
我是新的值: 青岛
类和实例的属性修改关系
类属性发生变化,调用类属性的实例属性发生改变
修改实例属性,类的属性不会发生改变
注意修改的是类的属性,还是实例的属性
# 类和实例
class Myclass:
val = "山东"
def func(self):
print("方法调用", self.val)
# 实例化
my_class = Myclass()
# 调用类的方法
my_class.func()
# 查看类的属性
print(my_class.val)
# 修改类的属性, 调用类属性的实例属性发生改变,
# 修改实例属性, 但是类的属性不发生改变
Myclass.val = "济南"
my_class.func()
my_class.val = "青岛"
print(Myclass.val)
结果
方法调用 山东
山东
方法调用 济南
济南