面向对象(面向对象设计,面向对象编程,实例变量)

概念:

面向对象 ,类.类是抽象的,类具有的所有的公共属性(数据属性,函数属性).对象是具体的
打个比方说,类是学校,而对象是具体的学校(比如清华)


面向对象设计(函数的形式)
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

猜你喜欢

转载自www.cnblogs.com/jiangxiaolong-1996/p/9302318.html