python集合、面向对象

set:集合是一个无序 不重复元素的集合;
即:无序唯一
基本功能:关系测试和消除重复元素,集合对象
大括号或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))
如图:


set5=set([1,3,2,4,-1]) #即:‘3’跑到后边去了 所以是无序的
把中括号换成小括号也是一样的
print(set5)
print(type(set5))
如图:
remove:存在删除  不存在系统抛异常并且程序停止运行
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)
如图:

演示联合 即:只要出现过的全部提取
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.静态方法
self 是一个参数 默认是当前对象的引用=地址指向
定义一个类,如果里面不写属性,就先写上:‘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()
如图:

 __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))#数字内存地址
    如图:
      
a和b相同吗?
    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)
如图:

简单办法:
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)
如图:

公有方法 允许外部调用的方法
私有方法不允许外部调用,私有的 标识为__
案例:
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
如图:

     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))
如图:

    # 即:从2开始

    lisi=youran
    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__)
如图:

小知识
python:命名规则:
变量命名:数字 、字母和‘_’
即:首字母不能是数字
非硬性要求:一般如:1._name 2.驼峰式写法
3.或者:第一个单词首字母小写其余的单词首字母大写
当看到如‘_name’这是为私有变量,最好不要访问
类属性归属于类,是 整个类共有的
完毕!

猜你喜欢

转载自blog.csdn.net/angelayouran/article/details/80275884