概念:
面向对象 ,类.类是抽象的,类具有的所有的公共属性(数据属性,函数属性).对象是具体的
打个比方说,类是学校,而对象是具体的学校(比如清华)
面向对象设计(函数的形式)
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