python基础笔记--构造函数的基础

自定义函数lambda

def clae(opt):
    if opt == '+':
        return lambda a, b :(a + b) 
    elif opt == '-':
        return lambda a ,b : (a - b)
    elif opt == '/':
        return lambda a , b :(a / b)
    elif  opt == '*':
        return lambda a ,b :(a * b)
    else:
        return 'nofund function model selection true again'
f1 = clae('+')
f2 = clae('-')
print(format(f2(2,3)))

这是一个计算器的简单设置

#face to object
#用面对对象的思想去做这个函数的思想方式,如何用类的对象进行函数分析
class Car:
    #类是对象的模板,创建出很多的模板出
    def __init__(self,name,age):
        self.name = name
        self.age = age
        print('这是init的函数区域')
        pass
    def __str__(self):
        return '%s 就是 %s'%(self.name,self.age)  #这个是当你创建一个实例对象之后,会生成的一范例
        pass
    def __new__(cls,*args,**kwargs):  #在这里真正创建对象实例的
        print('这是new的函数区域')
        return object.__new__(cls)
        pass
    pass
car = Car("faf",2)
print(car)    
#__new__ AND __init__区别,new是类的实例化方法,有return返回该实例,否则对象就创建不成功
#__init__用来做数据属性的初始化工作,也可以认为是实例的构造方法,接受类的实例,通过self对其进行构造  
#__new__函数执行要早于init函数

__init__这些都是魔术方法,__str__ 就是创建实例变量就会现实这个内容。

结果是,先从调用new的内容,然后再初始化属性。但是不加new也是可以的。

这是new的函数区域
这是init的函数区域
faf 就是 2

初始化内容,init里面存在有多种信息,可以直接存在列表里面,列表里面的每一个框都是一个实例。

class Dogs:
    def __init__(self,name,age,sex='male'):
        self.name = name
        self.age = age
        self.sex = sex
d1 = Dogs('qiu',1)
d2 = Dogs('fag',2)
d3 = Dogs(name='hfsdh',sex='female',age=2)
dog_number  =[d1,d2,d3]

还有可以创建cat 的类。创建内容不用传入所有的属性,比如,我创建cat,还可以设置一个speak的方法,加入属性noise,不过可以加入信息。

class Cat:
    def __init__(self,name,age,sex='female'):
        self.name = name
        self.age = age
        self.sex = sex
    def run(self):
        print('{0} is running '.format(self.name))
    def speak(self,noise):
        print('{0} is make noise {1}'.format(self.name,noise))
    def clas(self):
        print('{0} is a {1} cat'.format(self.name,self.sex))
cat = Cat('fafa',2)
cat.run()
cat.speak('jweguiwyeuhtgwhg')

经过使用del方法,def __del__可以直接删除当前内存里面的内容。

class Animal:
    def __init__(self,name):
        self.name  = name 
        pass
    def __str__(self):
        return ("这是构造初始化的方法")
    def __del__(self):
        print('这是一个构造方法')
        print('当程序后面没有调用该类的时候,自动调用该函数,释放空间')
        print('对象呗手动删除也会调用这个函数,释放完毕对象将不能再使用')
        pass
cat = Animal('小花猫')
print(cat)
del cat  #手动清理删除对象,会执行del函数
print(cat)

下面的print(cat)就无法显示实例。

私有属性:

#通过property的属性调用私有化的方法
class Person(object):
    def __init__(self):  
        self.__age = "34"   #定义一个私有化属性 
    def get_age(self):
        return self.__age
    def set_age(self,age):
        if age < 0:
            print('年龄不能小于0 ')
        else:
            self.__age = age
            pass
        pass
    age = property(get_age,set_age)
    age1 = property(get_age,set_age) #
    pass
p1 = Person()
print(p1.age)
p1.age = 25
print(p1.age)
print(p1.age1)

装饰器classmethod

class Account:
    interest_rate = 0.0568  #类变量
    def __init__(self,owner,amount):
        self.owner = owner
        self.amount = amount
        #类方法
    @classmethod 
    def interest_by(cls,amt):
        return cls.interest_rate * amt
    
account = Account('Tony ',80000.0)
Account.interest_rate
print('{0}'.format(Account.interest_rate))  #调用类变量要直接调用类名才可以,这样调用个体实例的方法来调用

interest = Account.interest_by(120000.0)
#print('account :{0:.4f}'.format(interest))

#使用属性
class Dog:
    def __init__(self,name,age,sex='female'):
        self.name = name
        self.__age = age  #私有变量
        #实例方法
    def run(self):
        print('{0}  is running '.format(self.name))
    #get 方法
    @property  #用装饰器添加属性装饰。提供一个getter的方法
    def age(self):  #替代 get_age  只读类型的
        return self.__age
    @age.setter  #s提供一个set的方法
    def age(self,age):  #替代set_age(self,age)  ,这是给私有程序变量赋值
        self.__age = age
dog = Dog('qiuqiu',2)
print('gougou nianling \n{0}'.format(dog.age))
dog.age = 3   #dog.set_age(3)
print('gougou nianling \n{0}'.format(dog.age))

class DataBaseClass(object):
    def __new__(cls, *args, **kwargs):
        #cls._instance = cls.__new__(cls)  不能使用自身的new方法,容易造成深度递归
        if not hasattr(cls,'_instance'):
            cls._instance = super().__new__(cls, *args, **kwargs)
        return cls._instance
    pass

class DBoptSingle(DataBaseClass):
    pass
db1 = DBoptSingle()
print(id(db1))
db2 = DBoptSingle()
print(id(db2))
db3 = DBoptSingle()
print(id(db3))

class People:
    
    country = 'China'
    @classmethod
    def get_country(cls):
        return cls.country
        pass
    @classmethod
    def change_country(cls,data):
        cls.country = data
    pass
print(People.get_country())  #累对象可以调用类属性,在静态方法中不会涉及到
p = People()
print(p.get_country())  #实例对象也可以修改
People.change_country('Indian')
print(People.get_country())

#dewmo 返回当前的时间
class Time:
    def __init__(self,hour,miniter,second):
        self.hour = hour
        self.miniter = miniter
        self.second = second
    @staticmethod
    def showtime():
        return time.strftime('%H:%M:%S',time.localtime())
    pass
print(Time.showtime())
T = Time(4,52,6)
print(T.showtime())

#继承的方法
class Animal:  #这是可以定义为一个父类
    def __init__(self,name):
        self.name = name 
    def show_info(self):
        return 'anmial  name is {0}'.format(self.name)
    def move(self):
        print('dongyidong')
class Cat(Animal):  #在类的后面加上括号
    def __init__(self,name,age):
        super().__init__(name)  #super()调用父类的方法
        self.age = age  #实例变量age
cat = Cat("Tom",2)
cat.move()   #可以调用父类的行为,继承父类的感觉 
print(cat.show_info())
#子类独有的实现,互不干扰

class Baseline(object):
    def test(self):
        print('___________base line___________')
        pass
class Base(object):
    def test(self):
        print('-------base ---------------')
class A(Baseline):
    def test(self):
        print("a in")
        pass
class B(Baseline):
    def test(self):
        print("b in")
        pass
class A1(Base):
    def test(self):
        print("a in base")
        pass
class B1(Base):
    def test(self):
        print("b in base")
        pass
class C(A1,B1):
  #  def test(self):
     #   print("c in")
        pass
class D(A,B):
    def test(self):
        print("d in")
        pass
class E(C,D):
   # def test(self):
        #print("e in")
        pass
class F(C,D):
    def test(self):
        print("f in")
        pass

e = E()
print(e.test())
print(E.__mro__)

多继承的顺序

#多继承的规则
class Hours:
    def __init__(self,name):
        self.name  = name
    def show_info(self):
        return "the name {0} of hours".format(self.name)
    def run(self):
        print('the hourse is running again')
class Donkey:
    def __init__(self,name):
        self.name = name 
      #  self.age = age
    def roll(self):
        print('驴打滚')
    def show_info(self):
        return 'donkey name {0} is '.format(self.name)
    def run(self):
        print('donkey is running{0}'.format(self.name))
#class Mule(Hours,Donkey):
class Mule(Hours, Donkey):  #z这里的左右就是优先级,都存在相同方法的时候
#查找方法顺序的问题,顺序应该是查找方法的顺序应该是在a中查找,如果a中没有, 再去b类中查找A(b,c),然后再去同级的c类中查找
    def __init__(self,name,age1):
        self.age1 = age1
        super().__init__(name) #这个是自动找父类,然后调用方法
        #Hourse.__init__(self,name )
   #如果父类有的要继承,没有的需要自己加上
    def age(self):
        print('{0}faagagagag'.format(self.age1))
    def run(self):  #因为父类中已经存在这类的方法,相当于方法覆盖啦已经
        print('paode kuai ')
m = Mule('faagag',23)
m.run()
m.roll()
m.age()
print(m.show_info())  #如果是都有优先从上往下
#这里还有是有一些问题需要解答,关于如何将自己的数据选好,用更多的堕属性去赋值

class eat:
    def eatway(self):
        print('eat')
        pass
class GrandFather(eat):
    def eat1(self):
        print('chi de fangfa')
        pass
    pass
class Father(GrandFather):
    print("fag")
    pass
class Son(Father):
    print('son eat')
    pass
son = Son()
print(son.eatway())

#多态,有多种形式的表达方法,可以增加程序的灵活性,增加程序的扩展性两个特性,duck typing you'qi'lai
class Animal:
    def speak(obj):
        print('动物叫')
    def running(self):
        print("running animal")
class Dog(Animal):
    def speak(self):
        print('小狗开始叫啦')
    def running(self):
        print('dog is running ')
class Cat(Animal):
    def speak(self):
        print('小猫开始叫啦')
    def running(self):
        print('cat is running ')    
class Car:
    def speak(self):
        print("小汽车开始叫啦")
    def running(self):
        print('car is running ')
def star(obj):
    obj.speak()
def Invoke(objket):
    objket.running()
star(Car())
star(Dog())
star(Cat()) #意思是不调用父类也能调用这个方法
#循环 调用是speak函数
listObj = [Cat(),Dog(),Car()]
for item in listObj:
    Invoke(item)

#多种异常的处理方法
#将多种值的异常现象进行改变, 吧某些异常合并到一个except的字符串
#自定义异常
#codintg= utf -8
class ZhijieketangException(Exception):  #首先寻找错误需要先在这里填入Exception
    def __init__(self,message):
        super().__init__(message)
    def __str__(self):
        return 'the string about you print is too long pass by'
        pass
i= input('请输入数字:')
num = 8888
try:
    i2 = int(i)
    try:
        result = num / i2
        print('{0}除以{1}等于{2}'.format(num,i2,result))
    except ZeroDivisionError as e1:
        print('不能除以0,异常 \n{}'.format(e1))
        # raise ZhijieketangException('不能除以0')
except ValueError as e2:
    print('输入的数字无效,异常 \n{}'.format(e2))
   # raise ZhijieketangException('输入的值有误')

#对于变量再说,怎么进行动态绑定,这个需要好好学一下
class Student:
    def __init__(self,name,age):
        self.name = name 
        self.age = age
        pass
    def __str__(self):
        return '%s 今年 %s 岁啦'%(self.name,self.age)
    pass

zlh= Student('张刘华',23)
zlh.weight = 80  #等于我这里给zlh实例赋值一个体重变量是80
print(zlh.weight)
zm = Student('张敏',22)
Student.school = '北京理工大学'  #直接给类添加一个属性值,其他的调用变量就都可以使用这个属性 zm.school = 


#以下可以动态添加方法
import types #添加方法的库
def dymicMethod(self):
    print('{} 体重是{} 在{} 读书'.format(self.name,self.weight,Student.school))  #这就是在外部添加一个方法
zlh.printInfo= types.MethodType(dymicMethod,zlh)
zlh.printInfo()

好的,下面是第八篇笔记。 ### Python 文件操作 #### 文件操作基础 - 文件操作是指对计算机硬盘上的文件进行读写操作,Python 中的文件操作是通过内置的 `open()` 函数实现的。 - `open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)` 函数用于打开一个文件,并返回文件对象。 - `file`:要打开的文件名(包含路径)。 - `mode`:文件打开的模式,有读模式('r')、写模式('w')、追加模式('a')等。 - `buffering`:缓冲区大小,0 表示不缓冲,1 表示缓冲一行,大于 1 表示缓冲区大小,负数表示使用默认缓冲区大小。 - `encoding`:文件编码格式。 - `errors`:错误处理方式。 - `newline`:换行符。 - 文件对象的方法: - `read(size=-1)`:读取文件内容,`size` 表示读取的字节数,不指定表示读取整个文件内容。 - `readline(size=-1)`:读取文件中的一行内容,`size` 表示读取的字节数,不指定表示读取整行内容。 - `readlines(hint=-1)`:读取所有行并返回一个列表,`hint` 表示读取的字节数,不指定表示读取全部行。 - `write(string)`:将字符串写入文件。 - `writelines(sequence)`:将字符串序列写入文件,序列中每个元素都是字符串。 #### 文件操作示例 - 打开文件:`file = open('file_name', 'r')`。 - 读取文件内容:`content = file.read()`。 - 关闭文件:`file.close()`。 - 读取文件中的一行内容:`line = file.readline()`。 - 逐行读取文件内容:`for line in file: print(line)`。 - 写入文件内容:`file.write('Hello World!')`。 - 写入多行内容:`file.writelines(['Hello', 'World', '!'])`。 #### 文件操作进阶 - 使用 `with` 语句可以自动关闭文件,避免忘记关闭文件而导致的问题。 - 示例: ```python with open('file_name', 'r') as file: content = file.read() ``` - 使用 `os` 模块可以对文件进行更加高级的操作,如文件重命名、删除等。 - 示例: ```python import os os.rename('file_name', 'new_file_name') # 重命名文件 os.remove('file_name') # 删除文件 ``` ### Python 面向对象编程 #### 面向对象编程基础 - 面向对象编程是一种编程思想,将程序中的对象看作是相互交互的实体,通过它们之间的交互来完成程序的功能。 - 类(class)是面向对象编程中的一个重要概念,它是一种用户自定义的数据类型。 - 类中包含属性(特征)和方法(行为),属性指对象的数据成员,方法指对象的行为成员。 - 类的定义: ```python class ClassName: # 类属性 attribute = value # 构造函数 def __init__(self, arg1, arg2, ...): self.arg1 = arg1 self.arg2 = arg2 ... # 类方法 def method(self, arg1, arg2, ...): ... ``` - 类的实例化: ```python object_name = ClassName(arg1, arg2, ...) ``` - 对象的属性和方法: ```python object_name.attribute # 访问对象的属性 object_name.method(arg1, arg2, ...) # 调用对象的方法 ``` #### 面向对象编程示例 - 示例:定义一个 `Rectangle` 类,实现矩形的面积和周长计算。 ```python class Rectangle: # 类属性 name = 'Rectangle' # 构造函数 def __init__(self, width, height): self.width = width self.height = height # 类方法 def area(self): return self.width * self.height def perimeter(self): return 2 * (self.width + self.height) ``` - 使用示例: ```python rectangle = Rectangle(3, 4) print(rectangle.name) # 输出 'Rectangle' print(rectangle.area()) # 输出 12 print(rectangle.perimeter()) # 输出 14 ``` ### 总结 本篇笔记介绍了 Python 中的文件操作和面向对象编程基础,包括文件操作函数的使用、类的定义、对象的实例化和属性、方法的访问等。了解和掌握这些内容可以帮助我们更好地进行 Python 编程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值