18day

# from management import *
# def main_page():
#     page=read_txt_file('files\mianPage.txt')
#     wil
#     linkman=read_json_file('files\linkman.json')
#     if not linkman:
#         linkman=[]
#         show_page=page%'(暂无联系人,请先添加)'
#     else:
#         names='\n'.join('♥'+[x['name'] for x in linman])
#         show_page=page%names
#     print(show_page)
#
# value=input('请选择(1~2)')
# if value=='1':
#     print('添加')
# elif value=='2':
#     print('搜索')
# elif value=='3':
#     print('退出')
# class  类名:
#        类的说明文档
#         类的内容(对象方法、类方法、静态方法+对象属性、类属性)
# 1.对象方法
# 方法指的就是定义在类中的函数
# 1)怎么定义:直接定义(不需要添加任何装饰器)在类中函数就是对象方法
# 2)怎么调用:通过'对象.xx()'的形式来调用
# 3)特点:每个对象方法都有一个默认参数self,在通过对象调用对象方法的时候
# self不需要传参,系统会自动将当前对象传给self(self谁调用就指向谁)

class Person:
    # 在类中创建一个对象方法
    def eat(self):
        print('吃饭')


# 创建对象P1
p1 = Person()
# 通过对象调用对象方法
p1.eat()


# 2.初始化方法 -  __init__
# __init__是python类中一个特殊的对象方法,也是魔法方法
# 魔法方法:类中方法名以__开头并且以__结尾的方法都是魔法方法,魔法方法都是系统自带
#   魔法方法不需要程序员主动调用,系统会在特定的情况下自动调用
# __init__方法会在每次创建对象时候被自动调用的
# 通过类创建对象的时候需不需要参数,需要几个参数,由类中的__init__决定
class Dog:
    def __init__(self):
        print('初始化')


dog1 = Dog()
dog2 = Dog()


class A:
    def __init__(self, x, y):
        print('A的初始化')


a1 = A(10, 20)
a2 = A(x=100, y=200)
# 属性
# 1.类中的属性
# 定义类就是用代码来描述这个类是拥有哪些相同特征的事物的总和。
# 如果特征是通过数据来体现的,那么这种特征就用属性来表示
# 1)类属性
# a.怎么定义:直接定义在类中的变量急速类属性
# b.怎么使用:通过'类.xx'的方式来使用
# c.什么时候用:属性值不会因为对象不同而不一样的时候就使用类属性
a = 10


class A:
    # a、name是一个类属性
    a = 10
    name = '小明'


# 使用类属性
print(A.a)
print(A.name)


# 2)对象属性
# a.怎么定义:以'self.xx=值'的形式定义在__init__方法中
# b.怎么使用:通过'对象.xx'的方式来使用
# c.什么时候用:属性值会因为对象不同而不一样的时候就使用对象属性
class A:
  def __init__(self):
    self.b = 10
    self.gender = '男'


x = A()  # 创建对象
print(x.b)
print(x.gender)


# 2.__init__的参数
class Person:
    def __init__(self, name):
        self.name = name
        self.age = 18
        self.gender = '男'


#         创建两个人的对象
p1 = Person('小明')
print(p1.name)

# 2.对象默认值
# 1)方式1:使用固定值(主要用于这个属性在绝大部分情况下都是某一个值,极少数情况就会变化的时候用)
# 2)方式2:在__init__中提供这个属性赋值的形参,形参没有默认值(属性值一般都不一样;要求创建
# 对象的时候必须提供某个属性的值)
# 3)在__init__中提供这个属性赋值的形参,形参有默认值
# 练习:定义圆类,拥有属性:圆周率、半径 拥有的方法:计算面积、计算周长
class R:
    π=3.1425926
    def __init__(self,r,):
        self.r=r
    def area(self):
        # 注意:在实现对象方法的功能的时候如果需要对象属性,由self提供
        return R.π*self.r**2
    def per(self):
        return 2*R.π*self.r
p1=R(3)
print(p1.area())
print(p1.per())
# 1.方法
# 1)对象方法
# a.怎么定义:直接定义
# b.怎么调用:对象.xx()
# c.特点:参数self,不需要传参
# b.什么时候用:如果实现函数的功能需要用到对象属性,就使用对象方法
class A:
    def func1(self):
        print('对象方法')
a=A()
a.func1()
# 2)类方法
# a.怎么定义:定义函数前加@classmethod装饰器
# b.怎么调用:类.xx()
# c.特点:自带参数cls,调用的时候不用传参,系统会自动将当前类传给cls
# b.什么时候用:在不需要对象属性的情况下需要类就使用类方法
# @classmethod
# def func2(cls):
#     print('类方法')
#
# func2()

# 3)静态方法
# a.怎么定义:定义函数加@staticmethod装饰器
# b.怎么调用:类.xx()
# c.特点:没有特点 - 没有默认参数
# b.什么时候用:实现函数功能既不需要类,也不需要对象,就使用静态方法
# @staticmethod
# def func3():
#     print('静态方法')
# A.func3()
#对象属性的增删改查
class Student:
    def __init__(self,name,stuid,age=18):
        self.name=name
        self.age=age
        self.stuid=stuid
        self.score
    #当通过print打印当前类的对象的时候,这个方法会被调用,并且在打印的时候会打印这个方法的返回值
    # 打印的是self就是谁
    def __repr__(self):
        def __repr__(self):
            # 学号:xx 姓名:xxx, 年龄:xx, 分数:xxx
            # return f'学号:{self.stuid} 姓名:{self.name}, 年龄:{self.age}, 分数:{self.score}'
            return str(self.__dict__)
print(stu1)
# 1.查  -  获取属性值
# 对象.对象属性  --  获取指定属性对应的值
print(stu1.name)
print(getatr(stu1,'name'))
# getattr可以动态确定获取的那种属性的值
# value=input('请输入需要获取属性的名字')
# print(getattr(stu1,value))
# 2.增、改
# 对象.属性=值  -  如果属性存在就修改指定属性的值,如果属性不存在就添加属性
setattr(对象,属性名,)
stu1.name='张三'
print(stu1)
stu1.height=180
print(stu1)
setattr(stu1,'name','李四')
print(stu1)
setattr(stu1,'weight',70)
print(stu1)
# 3.删
# del 对象.属性
del stu1.stuid
print(stu1)
delattr(stu1,'age')
print(stu1)
stu1.name='花花'
print(stu1)
class B:
    # __slots__可以约束当前类的对象最多能拥有哪些对象属性
    __slots__ = ('x','y','z')
    def __init__(self):
        self.x=10
        self.t=100
b=B()
b.y=200
b.t=300
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值