1、面向对象编程及语法
1、面向对象
2、专门语法
#类
#对象
#属性
💣💣💣💣💣面向对象编程💣💣💣💣💣
面向对象编程
核心:对象二字,对象就是一个用来盛放数据与功能的容器
基于该思想编写程序就创造一个个的容器
优点:扩展性强
缺点:编程复杂度提升
ps:和面向过程刚好相反
面向对象实例:
class Student:
school = '清华大学'
def__init__(self,x,y,z):
self.name = x
self.age = y
self.gender = z
def tell_info(student)
print('my name is %s age is %s genser is %s' %(studen['name'],student['age'],student['gender'])
调用类的过程
1、先创造一个空对象
2、自动触发类内的__init__函数运行,将空对象当作第一个参数自动传入
3、返回一个初始化好的对象给obj1
obj1 = Student('egon',18,'male')
obj2 = Student('tom',19,'female')
print(obj1.__dict__)
print(obj2.__dict__)
print(Student.__dict__)
属性查找
class Student:
school = '北京大学'
def__init__(self,x,y,z):
self.name = x
self.age = y
self.genser = z
def tell_info(self):
print('my name is %s age is %s gender is %s' %(self.name,self.age,self.gender)
obj1 = Student('egon',18,'male')
obj2 = Student('lxx',13,'male')
对象,属性的查找顺序:先从对象的字典里找,再从类的字典里找
print(obj1.name)
print(obj.school)
print(obj1.tell_info)
obj1.school = 'xxxx'
print(obj1.school)>>>>>xxxx
类:属性:从类自己的字典里找 不过一般类是为了给对象用的
print(Student.school)
print(Student.__info__)
print(Student.tell_info)
类中的数据属性是共享给所有对象的,所以更改类的数据内容,所有对象调用的都会改变,但是只改变单独对象的数据,不会影响到类和其他的对象数据
类中的函数是给对象用的,对象调用就是绑定方法,绑定的方法特点就是会将调用当作第一个参数自动传入
# obj2.tell_info() 就是传入了obj2自己 tell_info(obj2)
隐藏属性
class People:
_country = 'China' 其实已经变成了 _People__country = 'China'
def __init__(self,name,age):
self.__name = name
self.__age = age
def_func(self):
print('xxx')
print(People._People__country)
print(People._People__func)
print(People.__dict__)
obj1 = People('egon',18)
print(obj1.__dict__)
__开头的属性的特点:
1、并没有真的藏起来,只是变形的
2、该变形只在定义类阶段,扫描语法 时候执行,此后__开头的属性都不会变形
obj1.__gender = 'male'
print(obj1.__dict__)
print(obj1.gender)
3、该隐藏对外不对内
obj1.tell_name()
为何要隐藏属性
1、隐藏数据属性为了严格控制类外部访问者对属性的操作
class People:
def__init__(self,name,age):
self.__name = name
self.__age = age
def tell_info(self)
print('<%s:%s>' %(self.__name,self.__age))
def set_info(self,name,age):
if type(name)is not str:
print('名字必须是字符串')
return
if type(age)is not int:
print('年龄必须是数字')
return
self.__name = name
self.__age = age
obj = People('egon',18)
obj1.tell_info()
obj1.set_info('tom',28)
obj1.tell_info()
2、隐藏函数属性为了隔离复杂度