class类

# -*- coding: utf-8 -*-

# python是面向对象的编程语言,面向对象特点:继承、封装、多态
# 面向对象编程:和面向过程一样,是一种编程思想
# 类和对象:
# 什么是类?类是具有相同属性和行为方法的事物的抽象的集合
# 类的例子:人类,鱼类,猴子类
# 人类的属性:身高、体重、性别、年龄、姓名
# 人类的行为:吃喝拉撒睡
# 什么是对象?类的具体的实例化
# 人类中的对象:马云、麻花腾(马化腾)、丁三石(丁磊)

# 类的作用:创建对象,一般会在类中定义一些属性和函数,当使用类创建对象的时候,该对象就会拥有类中定于的这些属性和函数
# 类中一些属性和函数,是由所有的对象身上共同的属性和行为抽离出来的
# 对象的作用:实现函数和属性的调用执行的

d1 = {'name':'张三','age':22,'phone':110}
d2 = {'name':'李四','age':21,'phone':120}

student_list = [d1, d2]

# python中如何声明一个类型:
# class 班级群体
# object 继承的父类 object基类、顶级父类
class People(object):
    # pass 保证语法完整性
    # pass
    # 人出生的时候,已经具有的性别、年龄、身高、体重
    # 初始化函数,在创建对象的时候自动调用
    # __init__ 内置函数
    def __init__(self, name, age, phone):
        # 在这个函数中需要将创建对象时就应该拥有的一些属性赋值
        # 对象.属性名 = 属性值
        self.name = name
        self.age = age
        self.phone = phone

# 使用People类创建一个对象
# 创建对象的基本格式:对象名 = 类名()
# 当创建一个对象时,会在内存中开辟一块空间,来存放这个对象,这个对象是有一个地址的
# 每次创建的对象都是一个单独个体,他们的内存地址都是不一样的
p1 = People('张三', 22, 110)
# <__main__.People object at 0x000001F779B0B3C8>
# 0x000001F779B0B3C8 内存地址
# 内存:程序运行时,在计算机中占用的空间
# python中自动管理内存的
# 电脑上的500GB 1TB这种是硬盘空间(存储空间)
print(p1)
# 获取对象的属性值
# 格式:对象.属性名
name = p1.name
print(name)
age = p1.age
print(age)

# 对象.属性名 = 属性值
# 修改对象的属性值
p1.name = '李四'
print(p1.name)
# python中用来设置对象属性值的函数
# 1.要设置属性值的对象  2.要设置的属性名 3.要设置的属性值
setattr(p1, 'age', 21)
print(p1.age)
# 可以给对象添加新的属性
# 对象.属性名 = 属性值  如果这个属性不存在,那就是添加属性
p1.sex = ''
print(p1.sex)
# 删除对象的属性
# 对象的属性被删除之后,就不能再使用了
# AttributeError: sss 要删除的属性不存在
del p1.sex
# 删除对象属性的函数
# 1.要删除的对象  2.要删除的属性名
delattr(p1, 'phone')
# 删除之后,就不能再使用这个属性了
# print(p1.phone)

# setattr 动态添加或者修改属性
attr_dict = {'iq': '150', 'eq': '150', 'color': 'yellow'}
t = (1,2,3)
t = 1,2
print(attr_dict.items())
# for循环遍历字典
for key,value in attr_dict.items():
    # key是属性名 value是属性值
    # setattr,可以将一个字符串的属性名 添加到对象的属性中
    # p1.key = value 这种方式无法添加 相当于写了 p1.'iq' = '150'
    setattr(p1, key, value)

print(p1.iq)

# delattr 动态删除属性
# 删除对象p1中的属性
attr_list = ['iq','eq','color']
for attr in attr_list:
    # 可以使用delattr函数删除
    delattr(p1, attr)
# 对象的属性删除之后,不可使用
# print(p1.iq)

# -*- coding: utf-8 -*-
# 类属性、类变量:只能由类调用的属性

class People(object):

    # 类变量可以由所有的对象访问,但是对象只能访问,不可修改
    # 用来做资源共享
    total = 0

    # 初始化函数,添加对象属性
    def __init__(self, name, age, school):
        # 给对象属性赋值
        self.name = name
        self.age = age
        self.school = school
        # 只能使用类修改类变量的值
        People.total += 1

# p1p2是两个不同的对象,这两个对象各自的信息是不可以共享
p1 = People('娄长健', 21, '郑州电力职业技术学院')
print(People.total)
p2 = People('韩文远', 22, '河南理工大学')
print(People.total)
print(p1.name)
print(p2.name)

# 类无法访问对象实例的属性
# print(People.name)
# 对象实例可以访问类属性/类变量
# print(p1.total)
# 对象没有办法修改类变量的值,
# p1添加了一个total属性
# p1.total = 100
# print(p1.total)

# 如果需要修改类变量的值,只能由类调用修改
# People.total = 1000000
# print(People.total)
# 对象访问到的是修改之后的值
# print(p1.total)

p3 = People('张三', 23, '智游')
# 获取对象的属性值,如果属性不存在,会抛出异常
# AttributeError: 'People' object has no attribute 'ssss'
# name = p3.ssss
# print(name)
# 使用getattr(obejct, name, default)函数,会把获取到的属性值返回
# object 要获取属性的对象  name 要获取的属性名 default 当属性不存在,赋一个默认值
# 如果属性不存在,可以给一个默认值,不会让程序出现异常
age = getattr(p3, 'ssss', 0)
print(age)

# hasattr(object, name) 判断某个对象是否拥有某个属性
# 判断会返回结果,如果有这个属性返回Ture,没有返回False
s = hasattr(p3,'age')
print(s)

# 先判断是否有这个属性,在执行获取属性值的操作
if hasattr(p3, 'ssss'):
    s = p3.ssss
else:
    print('p3没有这个ssss这个属性')

# -*- coding: utf-8 -*-
# 对象实例函数

class People(object):
    #如果需要在创建对象的时候,给对象属性赋值,就可以在初始化函数中传递参数,给属性赋值,如果不需要初始化对象属性值,就不用写了
    def __init__(self):
        # 初始化函数可以不用传递参数值
        # 可以直接给属性赋一个默认值
        self.name = '张三'
        self.age = 20

    # 凡是在类中定义的函数,如果定义函数前,没有添加装饰器,这个函数默认为对象函数,只能由对象去调用执行,类也可以执行该函数,但是在调用时必须将一个People类的对象作为参数进行传递,也就是说无论是谁调用,都必须要要有个对象
    def eat(self):
        # self参数 不需要手动传递,运行python程序的时候,解释器会自动将调用函数的对象作为self参数进行传递
        # self指的是:对象A调用这个函数,self就是对象A,对象B调用这个函数,self就是对象B
        # 输出self
        print('self%s'%self)
    # 带有参数的对象函数
    def look_movie(self, name, price=28, *args, **kwargs):

        print(name,price,args,kwargs)

p1 = People()
# 对象调用函数
p1.eat()
print('p1  %s'%p1)
print('******************************')
p2 = People()
p2.eat()
print('p2:   %s'%p2)

# 如果使用类调用对象函数。必须将一个对象作为参数传入函数中
People.eat(p1)

# p1调用多参数函数
p1.look_movie('前任3', 39, 1, 50, drink='coco', food='boom')


# -*- coding: utf-8 -*-

# 对象的私有属性

class People(object):
    """ descrapition 可以写一些类的描述 """
    def __init__(self, name):
        self.name = name
        # 声明一个对象的私有属性
        # 私有属性只能在类声明的范围内使用
        # 声明私有属性,需要在属性名前添加__双下划线
        self.__age = 18
        # 一个下划线不是私有属性
        self._height = 180


    # 如果想要在类声明的外部获取私有属性的属性值,专门写一个函数,在函数中将私有属性值返回,在类声明外部就可以调用这个获取私有属性值
    def get_age(self):
        # 返回__age的属性值
        return self.__age

    # 如果想要在类声明的外部设置私有属性的属性值,专门写一个函数,在函数中对私有属性进行赋值,在类声明外部就可以调用这个设置私有属性值
    def set_age(self, value):
        # 类声明的范围内,可以放私有属性
        self.__age = value


p1 = People('张三')
# 一个下划线不是私有属性,可以在外部访问
print(p1._height)
print(p1.name)
# 超出类声明的范围,所在这个位置是无法访问__age属性值的
# print(p1.__age)
# 通过调用get_age()函数,获取__age的值
age = p1.get_age()
print(age)
# 在类声明的外部,无法直接修改私有属性值
#  p1.__age = 20
p1.set_age(20)

age = p1.get_age()
print(age)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值