(eval函)(类)(delattr,增删属性,三种方法)

"""
学员:杨欢

def waibu(func): # 1 包含内部函数的函数
    def neibu(canshu):
        func(canshu) # 3 内部函数引用外部函数的变量
    return neibu # 2外部函数返回内部函数的函数名
def hanshu(name):
    print(name,'开演唱会')
hanshu('刘德华')

def waibu(func):
    def neibu(canshu):
        func(canshu)
    return neibu
def hanshu(name):
    print(name,"开演唱会")
hanshu('刘德华')

import time
def decor(func):
    def neibu(canshu):
        start=time.time()
        func(canshu)
        stop=time.time()
        print(stop-start)
    return neibu
@decor
def hanshu(name):
    pass
hanshu('张三')

def decor(func):
    def neibu(canshu):
        start=time.time()
        func(canshu)
        stop=time.time()
        print(stop-start)
    return neibu
@decor
def hanshu(name):
    pass
hanshu('李四')

f=open('a.txt','w')
f.write('1,3,5,6,7\n20,21,22')
f.close()
f=open('a.txt','r')
# print(type(f.readline()))  <class 'str'>
content=f.readline()
while len(content)>0:
    for d in eval(content):
        if d%5==0 or d%7==0:
            print(d)
    content=f.readline()
f.close()

# content=f.readline()
# while len(content)>0:
#     for d in eval(content):
#         if d%5==0 or d%7==0:
#     content=f.readline()
#
# content=f.readline()
# while len(content)>0:
#     for d in eval(content):
#         if d%5==0 or d%7==0:
#             print(d)
#     content=f.readline()
#
# content=f.readline()
# while len(content)>0:
#     for d in eval(content):
#         if d%5==0 or d%7==0:
#             print(d)
#     content=f.readline()

{'name=':'张三','score':[1,2,3,4]}
(6,'r',34)
1+3
3*(5+1)
(2*3+1,7)
'3+5'

f=open('b.txt','r')
d=eval(f.readline())
print(d,type(d)) # {'name=': '张三', 'score': [1, 2, 3, 4]} <class 'dict'>
print(d['score'],type(d['score'])) # [1, 2, 3, 4] <class 'list'>
d=eval(f.readline())
print(d,type(d)) # (6, 'r', 34) <class 'tuple'>
d=eval(f.readline())
print(d,type(d)) # 4 <class 'int'>
d=eval(f.readline())
print(d,type(d))# 18 <class 'int'>
d=eval(f.readline())
print(d,type(d)) #(7, 7) <class 'tuple'>
d=eval(f.readline())
print(d,type(d)) # 3+5 <class 'str'>
# f.readline()读出的是字符串,eval后,如同“除掉”字符串两边的引号后 人眼看着是什么类型,就是什么类class,有运算符的,会进行运算,得到运算结果


#  下面开始,全部讲 面向对象, 类
class Student():
    ID=0
    name='lisi'
    address='shanxi'
    def say(self):
        print(self.ID,self.name,self.address,self.sex)
zs=Student()
zs.ID=1001
zs.name='张三'
zs.address='山东'
zs.sex='do not know'
zs.say()
print(Student.ID,Student.name,Student.address)

class Student(): # 声明类
    ID=1 # 类属性
    def say(self): # 方法method, 对象方法 实例化方法
        print(self.name,self.ID,self.address) # 对象属性
zs=Student() # 创建对象
zs.ID=2001
zs.name='张三'
zs.address='山东'
ls=Student()
ls.ID=3003
ls.name='李斯'
ls.address='山西'
zs.say() # 在say()之前写的对象属性,都能用。可以增加对象属性。所以类不是严格的封装
ls.say()


class Student():
    def __init__(self,name,age,dog):
        self.name=name
        self.age=age
        self.chongwuming=dog
        self.xiaogou='小狗'
        self.xiaomao='猪'
zs=Student("张三",18,'小黄')
print(zs.name,zs.age,zs.xiaogou,zs.xiaomao,zs.chongwuming)
#无init时,程序默认有
# 类里面有属性和方法。类属性在类里面 函数外面,对象属性在对象函数里面。类方法由类名调用Student.count。对象方法由对象名调用zs.say()

class Student():
    count=0
    def __init__(self,name,age):
        self.name=name
        self.age=age
        self.xiaogou='小狗'
        self.xiaomao='小猪'
        Student.count+=1
    def say(self):
        print(self.name,self.age)
zs=Student("张三",18)
print(zs.name,zs.age,zs.xiaogou,zs.xiaomao)
zs.say()

ls=Student('李斯',20)
print(ls.name,ls.age,zs.xiaogou)
print(Student.count)

class Student():
    def __init__(self,name):
        self.name=name
    def say(self):
        print(self.ID,self.sex)
zs=Student('张三')
zs.ID=1001
zs.sex='男'
zs.say()


class Student():
    def hehe(self,name):
        self.name=name
    def haha(self):
        self.hh=102
    def p(self):
        print(self.zhu)
zs=Student()
zs.hehe('张三')
zs.haha()
print(zs.hh)
print(zs.name)
zs.zhu='猪头'
zs.p()

class Student():
    def hehe(self,name):
        self.name=name
    def haha(self):
        self.hh=102
    def p(self):
        print(self.zhu)
zs=Student()
zs.hehe('张三')
print(zs.name)
zs.zhu='猪头'
zs.p()

class Student():
    count=0
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
    def say(self):
        print(self.name,self.age,self.sex,self.weight)
zs=Student('张三',10,'男')
ls=Student('老李',88,'female')
ls.weight=222
ls.say()
ls.name='李四'
ls.age=20
ls.sex='nv'
zs.weight=57.5
zs.say()
ls.say()

class Student():
    count=0 # 类 属性
    def __init__(self,name,age,sex): # 初始化对象
        self.name=name # 增加对象属性
        self.age=age
        self.sex=sex
    def say(self):
        print(self.name,self.age,self.sex)
zs=Student('张三',10,'男')
ls=Student('李四',20,'女')
zs.say()
ls.say()

class Student():
    count=0
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
        Student.count+=1
    def say(self):
        print(self.name,self.age,self.sex)

zs=Student('张三',10,'男')

ls=Student('李四',20,'女')
zs.say()
ls.say()
print(Student.count)
print(zs.count)
print(ls.count)


class Student():
    count=0
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
        Student.count+=1
    def say(self):
        print(self.name,self.age,self.sex)
zs=Student('张三',10,'男')
ls=Student('李四',20,'女')
zs.count=10
print(Student.count)
print(zs.count) # 本来zs.count,ls.count都是从Student.count取值,但zs.count=10改动了对象属性的值,
print(ls.count) # 当类属性和成员属性重名时,使用成员属性

class Student():
    count=0
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
        Student.count+=1
    def say(self):
        print(self.name,self.age,self.sex)
zs=Student('张三',10,'男')
ls=Student('李四',20,'女')
zs.count=10
wangwu=Student('王五',30,'好')
print(Student.count)
print(zs.count) # 当类属性和成员属性重名时,使用成员属性。Student.count类属性改变+1后,成员属性zs.count没有改变
print(ls.count)

class Student():
    count=0
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
        Student.count+=1
    def say(self):
        print(self.name,self.age,self.sex)
zs=Student('张三',10,'男')
ls=Student('李四',20,'女')
zs.count=10
wangwu=Student('王五',30,'女')
print(Student.count)
delattr(zs,'count') # 类属性和成员属性重名,为了使用类属性,删掉成员属性
print(zs.count)
print(ls.count)
zs.count=12
print(zs.count)

class Student():
    count=0
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
        Student.count+=1
    def say(self):
        print(self.name,self.age,self.sex)
zs=Student('张三',10,'男')
print(zs.name)
delattr(zs,'name')
# print(zs.name)
zs.name='张四'
zs.say()

class Student():
    count=5
    def __init__(self,name):
        self.name=name

    @classmethod
    def haha(cls):
        print(cls.count)
    def say(self):
        print(self.name)
zs=Student('张三')
Student.haha() #类 访问 类方法
zs.say()   # 对象 访问 对象方法
zs.haha()  # 对象 访问 类方法
Student.say() #类能访问两种方法,对象能访问三种方法。类方法,静态方法,对象方法

class Student():
    count=0
    def __init__(self,name):
        self.name=name
    @classmethod
    def clsmeth(cls):
        print(Student.count)
    def selmeth(self):
        print(self.name)
zs=Student('张三')
zs.clsmeth()
zs.selmeth()
Student.clsmeth()
# Student.selmeth()

class Student():
    def __init__(self,name):
        self.name=name
    @staticmethod
    def hx():
        print('我只是一个方法,跟类和对象没有任何关系。')
zs=Student('张三')
Student.hx()
zs.hx()

class Student():
    count=5
    def __init__(self,name):
        self.name=name
    @staticmethod
    def hx():
        print('我只是一个方法,跟类和对象没有任何关系。')
    @classmethod
    def clsmeth(cls,cls2,cls3):
        print(cls.count*cls2*cls3)
    @staticmethod
    def stameth(sta1,sta2):
        print(sta1*sta2)
    def say(self):
        print(self.name)
zs=Student('张三')
Student.clsmeth(3,4)
Student.stameth(3,4)
zs.clsmeth(3,4)
zs.stameth(3,4)
zs.say()
# Student.say()

class Student():
    count=5
    def __init__(self,name):
        self.name=name
    def duixiangfangfa(self,duixiangshuxing1,duixiangshuxing2):
        print(duixiangshuxing1+duixiangshuxing2+Student.count)
        print(self.name)
    @classmethod
    def leifangfa(cls,leishuxing1,leishuxing2):
        print(leishuxing1*leishuxing2*cls.count)
        print(Student.count)
    @staticmethod
    def jingtaifangfa(canshu1,canshu2):
        print(canshu1-canshu2)
        print("我只是一个方法,和类,对象都没有关系")
zs=Student('张三')
zs.duixiangfangfa(1,2)
zs.leifangfa(5,6)
zs.jingtaifangfa(3,4)
Student.jingtaifangfa(3,4)
Student.leifangfa(5,6)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值