Python--类

'''

import csv

dic={'zhangsan':66,'lisi':77,'sunwu':88,'laowang':99,'qiangxianke':100}

with open('foo2.csv', 'w', newline='',encoding='utf8') as f:
    f_csv = csv.writer(f)
    for i in dic.items():
        f_csv.writerow(i)

class student:
    def __init__(self,path):
        self.path=path
        self.sheet=[]
        with open(path,'r',encoding='utf8') as f:
            f_csv = csv.reader(f)
            for row in f_csv:
                self.sheet.append([str(row[0]),int(row[1])])
    def __getitem__(self,index):
        return self.sheet[index]

a=student('foo2.csv')
print(a)
for i in a:
    if i[0] == 'qiangxianke':
        print("qxk的成绩是",i[1])

# 继承
# 多态性

# oop 的三个概念
# 封装性:防止里面被外面破坏
#xx:公有变量
#_xx:内部变量 protected
#__xx:私有变量 prival
#__xx__:

class test:
    def __init__(self):
        self.num=10  #
        self._num=20 #可以强制使用,但是不能跨文件使用
        self.__num=30 #无论如何都不能调用
t=test()
print(t.num)
print(t._num)
# print(t.__num)
t.__num=40 #添加了名为“__num”的变量,对原来的内部变量无任何影响
print(t.__num) #和函数内部的变量不一样
print(t.__dir__())

name = 'l'
age = 19
sex = 'male'

name = 'lisi'
ahe = 20
sex = 'female'

class person:
    def __init__(self,name,age,sex):
        self.__name = name
        self.__age = age
        self.__sex = sex

a = person('zhangsan',19,'male')
b = person('lisi',20,'male')
print(f'姓名:{a.__name},年龄:{a.__age},性别:{a.__sex}')

class person:
    def __init__(self):
        pass
    def set_age(self,age):
        self.__age=age
    def get_age(self):
        return self.__age

a = person()
a.set_age(30)
print(a.get_age())


class person:
    def __init__(self):
        pass
    def set_age(self,age):
        if age>=200:
            raise ValueError("年纪太大了") ####
        else:
            self.__age=age
    def get_age(self):
        return self.__age

a = person()
a.set_age(300)
print(a.get_age())



class person:
    def __init__(self):
        pass
    def set_age(self,age):
        if age>=200:
            raise ValueError("年纪太大了") ####
        else:
            self.__age=age
    def get_age(self):
        return self.__age
    def del_age(self):
        del __age
    x = property(get_age,set_age) #建立一种关联

a = person()
a.x=100
print(a.x)

class person:
    def __init__(self):
        pass
    def set_age(self,age):
        if age>=200:
            raise ValueError("年纪太大了") ####
        else:
            self.__age=age
    def get_age(self):
        return self.__age
    def del_age(self):
        del self.__age
    x = property(get_age,set_age,del_age,'我是说明文档') #建立一种关联

a = person()
a.x =100  #删除了
del a.x
print(a.x)


import sys
sys.getrefcount(a) #被应用的次数

class person:
    def __init__(self):
        pass
    def set_age(self,age):
        if age>=200:
            raise ValueError("年纪太大了") ####
        else:
            self.__age=age
    def get_age(self):
        return self.__age
    def del_age(self):
        del self.__age
    x = property(get_age,set_age,del_age,'我是说明文档') #建立一种关联

a = person()
a.x =100
print(a.x)
help(person)
help(property)


class person:
    def __init__(self):
        pass
    @property #基础属性
    def age(self,age):
        self.__age=age
    @age.setter
    def get_age(self,age):
        return self.__age
    @age.deleter
    def del_age(self,age):
        del self.__age


a = person()
a.x =100
#del a.x  #删除了
print(a.x)


class person:
    def __init__(self,name,age):
        self.name = name
        self.age=age
    def run(self):
        print(f'{self.name}is running')
class man(person):
    weight =100
    pass
a=man('zhangsan',20)
print(a.name,a.age)
a.run()
# print(run()) ==> 这个会有none输出
print(a.weight)


#重载 :java里常见

# assert
class father:
    def add(selfself,a):
        print('{} in father '.format(a+5))
class son(father):
    def add(selfself,b):
        assert isinstance(b,int),'parameter must be int type' #断言:bool判断
        super().add(b)  #
a=son()
print(isinstance(father(),father))
print(isinstance(father(),son))
# print(type(father(),son)) ==>错
a.add(123)


#raise 捕捉异常
i=7
while i<6:
    if i>2:
        raise ValueError('值太大了!')
    i+=1
    print(i)


#try except
b =0
c =1
try:
    a=b/c
    print(a)
except ZeroDivisionError:
    print('分母为0')
finally:
    print('无论对错我都执行')
'''

#多态 不同类型的相同数据接口....

#操作符的重载
class person:
    def __init__(self,d):
        print(d)
        self.data = d
    def add(self,d):
        return self.data+d.data
class son(person):
    def __add__(self,d):
        print('son',d)
        return super().add(d)
a=son(1)
b=son(2)
print(a+b)
print(a.add(b))


#多态 不同类型的相同数据接口....

#操作符的重载****
class person:
    def __init__(self,d):
        print(d)
        self.data = d
    def add(self,d): #这个d指的一个类
        return self.data+d.data
class son(person):
    def __add__(self,d):
        print('son',d)
        return super().add(d) #super指父类
a=son(1)
b=son(2)
print(a+b) #调用的a的构造函数a+b
print(a.add(b))


class Dog(object):
    def __init__(self,name):
        self.name = name
    @property
    def eat(self):
        print('%s is eating'%self.name)
d =Dog("chendongha")
d.eat  #封装不需要加括号


class upc(object):
    def __init__(self,xueyuan):
        self.xueyuan =  xueyuan
lisi = upc("计通学院")
zhangsan = upc('地学院')


def fun(*args):
    print(args)

def func(**args): #两个传出字典类型
    print(args)

func(a=1,b=2,c=3)
fun(1,2,3)

def function(arg,*args,**kwargs):
    print(arg,args,kwargs)
function(6,7,5,5,a=2) #顺序不能变

from math import  pi,e
print(pi,e)






class student:
    def __init__(self,name,age,score):
        self.name=name
        self.age=age
        self.score=score
    def get_name(self):
        return self.name
    def get_age(self):
        if isinstance(self.age,int):
            return self.age
        else:
            raise ValueError('please input int value')
    def get_course(self):
        for num in self.score:
            if not isinstance(num,int):
                raise ValueError('error')
        a=max(self.score)
        return a
zm=student('zhangming',20,[90,80])
print(zm.get_name())
print(zm.get_age())
print(zm.get_course())



class laoshi:
    def __init__(self,a):
        self.a=a
    def handle(self,b):
        return self.a+b
class stu:
    def __init__(self,c):
        self.c=c
    def handle(self,d):
        return d+super().hanlde(d)

w=laoshi(2)
print(w.handle(3))
'''



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值