set:集合是一个无序 不重复元素的集合;
即:无序唯一
基本功能:关系测试和消除重复元素,集合对象
大括号或set()函数可以用来创建集合 即:set()是构造函数
注意:创建空集合,必须使用set() 而不是{}, {}用于创建空字典;
创建语法:
set1=set()#空值
set2={'s',1,11.2,'b'}#即:如果把逗号换成冒号,则为字典
print(type(set1))
print(type(set2))
即:无序唯一
基本功能:关系测试和消除重复元素,集合对象
大括号或set()函数可以用来创建集合 即:set()是构造函数
注意:创建空集合,必须使用set() 而不是{}, {}用于创建空字典;
创建语法:
set1=set()#空值
set2={'s',1,11.2,'b'}#即:如果把逗号换成冒号,则为字典
print(type(set1))
print(type(set2))
如图:
set3=set({1,2,3,4})
print(set3)
print(type(set3))
set4=set({1:2,3:4})#如果是字典 获取的是key 因为key唯一的
print(set4)
print(type(set4))
print(set3)
print(type(set3))
set4=set({1:2,3:4})#如果是字典 获取的是key 因为key唯一的
print(set4)
print(type(set4))
如图:
set5=set([1,3,2,4,-1]) #即:‘3’跑到后边去了 所以是无序的
把中括号换成小括号也是一样的
print(set5)
print(type(set5))
把中括号换成小括号也是一样的
print(set5)
print(type(set5))
如图:
remove:存在删除 不存在系统抛异常并且程序停止运行
set5.remove(3)
print(set5)
unm=set5.pop()#删除 正整数里面最小
print(unm)
set5.remove(3)
print(set5)
unm=set5.pop()#删除 正整数里面最小
print(unm)
如图:
update:更新
set6=set({1,3,2,4,-1})
set6.update({22,33,44,-6})
print(set6)
add(key):key不存在就添加 存在就不添加
集合:交集 并集 差集
a = {'peace','peace','rong','rong','nick'}
b = {'nick','hapy','rong','kangli'}
print(a)
print(b)
b = {'nick','hapy','rong','kangli'}
print(a)
print(b)
如图:
演示联合 即:只要出现过的全部提取
c=a|b
print(c)
print(type(c))
print(c)
如图:
演示交集 重复的提取
d = a&b
print(d)
如图:
演示差 以前一个为主 去掉重复 剩下前一个中的数据
print(a-b)
如图:
对称差集 不重复的数据 ^ 异 或 即:把a和b 里面没有重复的集合在一起
print(a^b)
如图:
面向对象
类和对象
类:具有相同的属性和方法的对象的集合
对象:万物皆对象
类和对象的关系: 类是对象的模板,对象是类的实例
类:分为
属性
和
方法
属性 :1.对象属性:私有 和 公有 2.类属性:私有 和 公有
方法:1.公有方法 2.私有方法 3.类方法 4.属性方法 5.静态方法
属性 :1.对象属性:私有 和 公有 2.类属性:私有 和 公有
方法:1.公有方法 2.私有方法 3.类方法 4.属性方法 5.静态方法
self 是一个参数 默认是当前对象的引用=地址指向
定义一个类,如果里面不写属性,就先写上:‘pass’这样系统不会抛异常
class Person:
pass
定义一个类,如果里面不写属性,就先写上:‘pass’这样系统不会抛异常
class Person:
pass
class 类名
def :声明方法的标识 eat 函数名 方法名
()形参列表 形参:形式列表
class Person:#方法
def eat(self):
print('人去滑雪..')
def sleep(self):
print('累了就睡觉..')
if '__main__'.__eq__(__name__):#对象
zhangsan=Person()
zhangsan.eat()
zhangsan.sleep()
如图:
初始化:
__init__(self):系统自动调用初始化方法,
先生成对象,在调用此方法,再将对象赋值给引用名。
class Person:
def __init__(self ):
self.name='无名氏'
self.age=18
print('__init__ Person')
def eat(self):
print(self.name+'去滑雪..')
def sleep(self):
print(self.name+'滑累了,就去睡觉..')
if '__main__'.__eq__(__name__):
xiaohua=Person()
xiaohua.name='小花'
xiaohua.eat()
xiaohua.sleep()
带参--函数
class Person:
def __init__(self,name,age):
self.name=name
self.age=age
print('貌美如花之:')
def hello(self):
print('大家好,我是\t'+self.name+'\n今年',self.age)
if '__main__'.__eq__(__name__):
xiaohua=Person('小花',18)
xiaohua.hello()
class Person:
def __init__(self,name,age):
self.name=name
self.age=age
print('貌美如花之:')
def hello(self):
print('大家好,我是\t'+self.name+'\n今年',self.age)
if '__main__'.__eq__(__name__):
xiaohua=Person('小花',18)
xiaohua.hello()
如图:
__str__ 重写
class Person:
def __init__(self,name,age):
self.name=name
self.age=age
print('貌美如花之:')
def hello(self):
print('大家好,我是\t'+self.name+'\n今年',self.age)
def __str__(self):
即:__str__ 重写
#object:所有数据类型的基类 父类 return:返回
return 'name:'+self.name+'age:'+str(self.age)
if '__main__'.__eq__(__name__):
xiaohua=Person('小花',18)
print(xiaohua)#内存地址
print(str(xiaohua))
print(id(xiaohua))#数字内存地址
如图:
self.name=name
self.age=age
print('貌美如花之:')
def hello(self):
print('大家好,我是\t'+self.name+'\n今年',self.age)
def __str__(self):
即:__str__ 重写
#object:所有数据类型的基类 父类 return:返回
return 'name:'+self.name+'age:'+str(self.age)
if '__main__'.__eq__(__name__):
xiaohua=Person('小花',18)
print(xiaohua)#内存地址
print(str(xiaohua))
print(id(xiaohua))#数字内存地址
如图:
a和b相同吗?
a=Person('小花',18)
b=Person('小花,18')
相同的是值 不同的是内存地址
即:属性值相同,它就是相同的,如果用系统自带(object)的比较,肯定不同。
当你的需求 在自带系统满足不了,就需要 用:__str__ 重写 即:重新写一套规则。
a=Person('小花',18)
b=Person('小花,18')
相同的是值 不同的是内存地址
即:属性值相同,它就是相同的,如果用系统自带(object)的比较,肯定不同。
当你的需求 在自带系统满足不了,就需要 用:__str__ 重写 即:重新写一套规则。
属性对于类来说:属于全局。即:每个方法都可以调用。
如果不用__init__()方法 可以通过:set/get来写
self.name :创建一个属性叫name 并且把形参name 赋值给了name
class Person:
def setname(self,new_name):
self.name=new_name
def setage(self,new_age):
self.age=new_age
def __str__(self):
return 'name:'+self.name+'age:'+str(self.age)
if '__main__'.__eq__(__name__):
xiaoming=Person()
xiaoming.setname('新的名字')
xiaoming.setage(15)
print(xiaoming)
如果不用__init__()方法 可以通过:set/get来写
self.name :创建一个属性叫name 并且把形参name 赋值给了name
class Person:
def setname(self,new_name):
self.name=new_name
def setage(self,new_age):
self.age=new_age
def __str__(self):
return 'name:'+self.name+'age:'+str(self.age)
if '__main__'.__eq__(__name__):
xiaoming=Person()
xiaoming.setname('新的名字')
xiaoming.setage(15)
print(xiaoming)
如图:
简单办法:
class Person:
def __str__(self):
return 'name:'+self.name+'age:'+str(self.age)
if '__main__'.__eq__(__name__):
xiaoming=Person()
xiaoming.name='新的名字\t'
xiaoming.age= 15
class Person:
def __str__(self):
return 'name:'+self.name+'age:'+str(self.age)
if '__main__'.__eq__(__name__):
xiaoming=Person()
xiaoming.name='新的名字\t'
xiaoming.age= 15
print(str(xiaoming))
xiaoming.sex='男'
即:解释性语言不需要 预 定义,随时创建 随时使用
print('小明的性别:',xiaoming.sex)
xiaoming.sex='男'
即:解释性语言不需要 预 定义,随时创建 随时使用
print('小明的性别:',xiaoming.sex)
如图:
公有方法
:允许外部调用的方法
私有方法:不允许外部调用,私有的 标识为__
案例:
class Person:
def __show__(self):
print('上课很认真')
if '__main__'.__eq__(__name__):
youran=Person()
youran.__show__()
即:只能在类中使用,以__开头 __结尾
私有方法:不允许外部调用,私有的 标识为__
案例:
class Person:
def __show__(self):
print('上课很认真')
if '__main__'.__eq__(__name__):
youran=Person()
youran.__show__()
即:只能在类中使用,以__开头 __结尾
del 引用:
class Person:
def __str__(self):
return 'name:'+self.name+'age:'+str(self.age)
def __del__(self):
print('对象被删除')
if '__main__'.__eq__(__name__):
youran=Person()
youran.name='悠然'
youran.age=22
1.直接删除
del youran
class Person:
def __str__(self):
return 'name:'+self.name+'age:'+str(self.age)
def __del__(self):
print('对象被删除')
if '__main__'.__eq__(__name__):
youran=Person()
youran.name='悠然'
youran.age=22
1.直接删除
del youran
如图:
2.当程序运行完毕 系统自动删除
for i in range(10):
print(i)
如图:
import :导入
import sys
t=T()
ref :引用传递
sys.getrefcount(t) 返回值 即:有多少个引用 从2开始
案例:
import sys
class Person:
def __str__(self):
return 'name:'+self.name+'age:'+str(self.age)
if '__main__'.__eq__(__name__):
youran=Person()
youran.name='悠然'
youran.age=22
print(sys.getrefcount(youran))
import sys
t=T()
ref :引用传递
sys.getrefcount(t) 返回值 即:有多少个引用 从2开始
案例:
import sys
class Person:
def __str__(self):
return 'name:'+self.name+'age:'+str(self.age)
if '__main__'.__eq__(__name__):
youran=Person()
youran.name='悠然'
youran.age=22
print(sys.getrefcount(youran))
如图:
# 即:从2开始
lisi=youran
print(sys.getrefcount(lisi))
print(sys.getrefcount(lisi))
如图:
即:lisi 为第3个
封装的意义:规定规则
class Person:
def __init__(self, name, age):
self.name=name
self.__age__=age
def setname(self,new_name):
self.name=new_name
def setage(self,new_age):
'''
封装的意义 doc 注释=>文档注释
:param new_age: 新的年龄 0-100
:return: none
'''
if new_age<0 or new_age>100:
print('超出年龄限制,默认18')
self.__age__=18
else:
self.__age__=new_age
def __str__(self):
return 'name:'+self.name+'age:'+str(self.age)
if '__main__'.__eq__(__name__):
xiaoming = Person('新的名字',50)
# xiaoming.setname()
xiaoming.setage(150)
print('age:',xiaoming.__age__)
class Person:
def __init__(self, name, age):
self.name=name
self.__age__=age
def setname(self,new_name):
self.name=new_name
def setage(self,new_age):
'''
封装的意义 doc 注释=>文档注释
:param new_age: 新的年龄 0-100
:return: none
'''
if new_age<0 or new_age>100:
print('超出年龄限制,默认18')
self.__age__=18
else:
self.__age__=new_age
def __str__(self):
return 'name:'+self.name+'age:'+str(self.age)
if '__main__'.__eq__(__name__):
xiaoming = Person('新的名字',50)
# xiaoming.setname()
xiaoming.setage(150)
print('age:',xiaoming.__age__)
如图:
小知识
python:命名规则:
变量命名:数字 、字母和‘_’
即:首字母不能是数字
非硬性要求:一般如:1._name 2.驼峰式写法
3.或者:第一个单词首字母小写其余的单词首字母大写
当看到如‘_name’这是为私有变量,最好不要访问
类属性归属于类,是 整个类共有的
python:命名规则:
变量命名:数字 、字母和‘_’
即:首字母不能是数字
非硬性要求:一般如:1._name 2.驼峰式写法
3.或者:第一个单词首字母小写其余的单词首字母大写
当看到如‘_name’这是为私有变量,最好不要访问
类属性归属于类,是 整个类共有的
完毕!