动作和属性的集合叫做对象。
现实世界中一切皆对象。
类:把一类事物的相同的属性和动作整合到一起就是类。类是一个抽象的概念。
对象:就是基于类而创建的一个具体的事物(具体存在的),对象也是特征和动作整合到一起的。
学校类:
特征:name.addr,type
动作:考试,招生,招老师,开除学生
python当中可以用面向对象编程,也可以面像过程和面向函数编程。
类和对象
申明一个类的语法结构:
class 类名:
创建类的对象语法:
类名()
类有自己的内置属性,类名.属性
内存地址加()可以运行函数。
类的属性都是放在一个字典当中,类名.属性其实就是从属性字典中获取键值。
class china:
name="zhang"
def fun(self):
print("你好张亚萍")
print(china.__dict__)
print(china.__dict__["name"])
print(china.__dict__)
print(china.__dict__["name"])
上面两句合起来的意思就是下面一句话的意思。也就是下面一句话的本质是上面的两句话。
print(china.name)
所有的类都是object类的子类。
类和函数是不一样的,尤其是创建对象传参的过程不一样。
实例是执行init函数产生的,所以只有数据属性,没有函数属性。
创建一个实例就是执行一次init方法。
函数属性属于类。
self就是实例化对象自己。
凡是类中定义的函数第一个参数都为self,在实例化的时候对象可以调用,python默认会将实例化对象传给self。所以这个参数可以不写,python默认传递。
类属性的删除使用del.
类调用的时候不会自动传递self,需要将实例自己传进去。
class chinese: dang="社会" def __init__(self,name,age,gender): self.mingzi=name self.nianling=age self.xingbie=gender def bad(self): print("%s有不好的习惯,随地吐痰"%(self.mingzi)) z=chinese("小明",18,"男的") t=z.bad() print(t) #查看类a数据属性dang: print(chinese.dang) #修改类数据属性dang chinese.dang="中华人民共和国" print(chinese.dang) #删除类数据属性dang del chinese.dang print(chinese.__dict__) #增加类函数属性 def good(self,food): print("%s很好吃"%food) chinese.better=good chinese.better(chinese,"土豆") #删除类函数属性 del chinese.bad print(chinese.__dict__) #修改类函数属性 def p(self,jiamen): print("%s我是修改后的函数"%jiamen) chinese.better=p print(chinese.better(chinese,"开心"))
class chinese: dang="社会" def __init__(self,name,age,gender): self.mingzi=name self.nianling=age self.xingbie=gender def bad(self): print("%s有不好的习惯,随地吐痰"%(self.mingzi)) z=chinese("小明",18,"男的") #查看实例属性 print(z.mingzi) z.bad() #增加实例属性 z.hobby="篮球" print(z.__dict__) print(z.hobby) #修改实例属性 z.age=10 print(z.age) #删除实例属性 del z.hobby print(z.__dict__)
class chinese: dang="社会" def __init__(self,name,age,gender): self.mingzi=name self.nianling=age self.xingbie=gender def bad(self): print("%s有不好的习惯,随地吐痰"%(self.mingzi)) z=chinese("小明",18,"男的") z.dang="日本" print(z.dang)#相当于给自己怎加了一个属性日本,运行结果为日本 print(chinese.dang)#任然是类属性,运行结果为社会
只有使用.进行访问的遵循在类中查找。如下可以证明;
dang = "社会" class chinese: def __init__(self,name,age,gender): self.mingzi=name self.nianling=age self.xingbie=gender def bad(self): print("%s有不好的习惯,随地吐痰"%(self.mingzi)) z=chinese("小明",18,"男的") print(z.dang) 函数运行结果为AttributeError: 'chinese' object has no attribute 'dang'
dang = "社会" class chinese: def __init__(self,name,age,gender): print("-----",dang) self.mingzi=name self.nianling=age self.xingbie=gender def bad(self): print("%s有不好的习惯,随地吐痰"%(self.mingzi)) z=chinese("小明",18,"男的") 函数的运行结果为----- 社会
def __init__(self,name,age,gender): print("--------->:",dang) self.mingzi=name self.nianling=age self.xingbie=gender def bad(self): print("%s有不好的习惯,随地吐痰"%(self.mingzi)) z=chinese("小明",18,"男的") 程序运行结果为--------->: ,因为只有使用.调用的才遵循字典原则,没有点则视为普通变量。
只要使用.调用就只能在类中
class chinese: dang = "中国" l=["z","n"] def __init__(self,name,age,gender): dang = "中国" print("--------->:",dang) self.mingzi=name self.nianling=age self.xingbie=gender def bad(self): print("%s有不好的习惯,随地吐痰"%(self.mingzi)) z=chinese("小明",18,"男的") #z.l=["1","2"]#这是给实例对象增加了一个属性 z.l.append("cc")#这是将类的数据属性进行改变,注意等号=和append等方法的不同。 print(z.l)
进行查找,