概念:
面向对象 ,类.类是抽象的,类具有的所有的公共属性(数据属性,函数属性).对象是具体的
打个比方说,类是学校,而对象是具体的学校(比如清华)
面向对象设计(函数的形式)
def school(name,addr,number): #只有学校能调用该school方法,防止其他类(人啊,物啊等)调用学校的属性 def init(name,addr,number): date = { 'name':name, 'addr':addr, #这里定义了一个函数作用域,防止函数外部访问函数内的变量 'number':number, 'Zhao_Sheng':Zhao_Sheng } return date def Zhao_Sheng(name): print('%s学校招生了'%name) return init(name,addr,number) sch1 = school('清华','北京',10000) print(sch1['name']) sch1['Zhao_Sheng']('清华')
面向对象,类变量与实例变量,实例化
类属性分为2种:数据属性与函数属性
对象只有数据属性(通过构造方法__init__设置),没有函数属性.
class school: #class关键字,申明一个类 country= 'china' #在类下直接定义变量为类变量,与对象无关 def __init__(self,name,addr,munber): #执行class时,__init__函数自动执行,__init__内的变量为实例变量 self.name = name self.addr = addr self.munber = munber def Zhao_Sheng(self): #self这个参数是实例化时具体的对象 print('%s开始招生了'%self.name) sch2 = school('北大','北京',5000) #实例化 print(school.__dict__) print(sch2.__dict__) #__dict__查看该类(实例)的变量 print(school.country) #以类的形式访问类变量 print(sch2.country) #对象访问类变量(作用域:对象访问变量,先找实例变量,找不到,再找类变量(类不能访问实例变量)) print(sch2.__dict__) #{'name': '北大', 'addr': '北京', 'munber': 5000} print(sch2.name) sch2.Zhao_Sheng() school.Zhao_Sheng(sch2) #类调用函数(将sch2 传入 self),得到的结果与sch2.Zhao_Sheng()相同
类变量的增删改查 实质是对类的属性字典进行增删改查
class people: name = 'jiang' age = 18 def Eat(self): print('真好吃') people1 = people() #实例化时 ()不要忘记加 people.sex = 'man' #增加了类的新变量 sex = 'man' print(people1.sex) people.name = 'xuangyuan' #改变类name print(people1.name) def Eat(self): #类中的函数也是一个变量,也可以增删改查 print('好难吃') people.Eat = Eat people1.Eat() del people.name #删除类类变量name
实例也可以对实例变量进行增删改查(与类类似) 如p1.name = 'shengnong',就是将原来的name改为'shengnong'
变量易错点
country = 'china' class guojia: country = 'japan' def __init__(self): #调用实例变量与类变量用 . 号调用, .号调用只作用在该类中 print('---->',country) #这个prin函数中的country直接是变量,遵循变量作用域原则 #如果在__init__内添加country,那么打印的就是__init__内的值 guojia1 = guojia() #----> 运行构造方法,变量country不是通过.号的形式调用,所以调用全局变量中的country print(guojia1.country) #japan