• Python面向对象


    # 1.编写类:
    # class OBJ: #定义类名
    # def __init__(self,name): #构造法法 实例化对象时可以向其中传参
    # self.name = name
    # def func(self): #定义类中的方法,第一个参数self表示实例化对象后的对象
    # pass
    # obj = OBJ("obj1") #实例化类OBJ的对象obj,传入name参数obj1
    # print(obj.name) #查看对象obj的name数据
    # obj.func() #用obj调用在定义OBJ类时候定义好的方法func
    # 2.
    # 面向对象的三大特征:封装,继承,多态
    # 封装:1.将类中的方法封装起来方便其他地方调用
    # 2.以对象的形式对数据进行封装,打包起来方便其他地方调用
    # 继承: 派生类可以调用基类中的方法,数据等
    # 可以多重继承(方法,数据现在对象本身的类中进行寻找,若没找到,从左到右依次从基类中进行查找,使用找到的第一个)
    # 多态: 可以向参数中传递多种数据类型,Python本身自带多态
    # 3.
    # class A:
    # def func(self,a1):
    # print(a1)
    # a = A()
    # a.func(a1=2)
    # 4.
    # 在类中的函数被称为方法,方法中第一个参数为实例化后对象本身(self),除此之外没有其他区别.
    # 5.
    # 在实例化一个类的对象是自动被执行的一种方法__init__(self),可以实现用对象将数据进行封装.实例化对象时需要给出构造房中所需要的参数.也成初始化.
    # 6.
    # 定义类时其中的self参数为实例化对象后的对象本身
    # 7.
    # class Person:
    # def __init__(self,name,age,gender):
    # self.name = name
    # self.age = age
    # self.gender = gender
    # obj = Person("徐建",20,"男")
    # 以上代码体现了面向对象的三大特征之一:封装
    # 8.
    # class Message:
    # def email(self):pass
    # def msg(self):pass
    # def wechat(self):pass
    # 以上代码体现了面向对象的三大特征之一:多态
    # 9.
    # class Foo:
    # def func(self):
    # print('foo.func')
    # obj = Foo()
    # result = obj.func()
    # print(result) # 此行输出None,函数没有return 所以默认返回值为None
    # 10. 求圆的周长,面积:
    # class Circle:
    # def __init__(self,R):
    # self.R = R
    # def Area(self):
    # return 3.14*self.R**2 #求圆的面积 πR**2
    # def Per(self):
    # return 3.14*self.R*2 #求圆的周长 2πR
    # Q = Circle(9)
    # print(Q.Area())
    # print(Q.Per())
    # 11. 面向对象中为什么要有继承?
    # 避免重写代码,提高代码的重用性
    # 12. Python多继承时,查找成员的顺序遵循什么规则?
    # 先从对象本身的类中进行寻找,若没找到,从左到右一次对继承的基类中进行寻找,使用找到的第一个
    # 13.
    # class Base1:
    # def f1(self):
    # print('base1.1')
    # def f2(self):
    # print('base1.f2')
    # def f3(self):
    # print('base2.f3')
    # self.f1()
    # class Base2:
    # def f1(self):
    # print('base2.f1')
    # class Foo(Base1,Base2):
    # def f0(self):
    # print('foo.f0')
    # self.f3()
    # obj = Foo()
    # obj.f0()
    # """
    # 以上代码执行结果如下:
    # foo.f0
    # base2.f3
    # base.1
    # """
    # 14.
    # class Base:
    # def f1(self):
    # print('base.f1')
    # def f3(self):
    # self.f1()
    # print('base.f3')
    # class Foo(Base):
    # def f1(self):
    # print('foo.f1')
    # def f2(self):
    # print('foo.f2')
    # self.f3()
    # obj2 = Base()
    # obj2.f2()
    # 以上代码没有执行结果,obj2 为Base类的实例化对象,并没有f2方法.

    # 1.面线对象的三大特征:
    # 封装: 将类中的方法进行打包,封装.方便在其他地方调用
    # 以对象的形式将数据进行打包封装,以方便在其他店方获取使用对象的数据.
    # class Foo:
    # def __init__(self,name,age):
    # self.name = name
    # self.age = age
    # def sleep(self):
    # print("睡觉")
    # obj = Foo("徐建","20") #实例化对象,将姓名和年龄封装到对象中.
    # print(obj.name) #徐建
    # obj.sleep() #睡觉 对象obj可以调用类中定义好的方法sleep
    # 继承: 当要创建多个类,并且多个类中有相同的方法时,可以使用类的继承,派生类可以集成调用基类中的方法.
    # 多继承:调用方法时现在对象本身的类中进行寻找,如没有找到,则从做到右依次在继承的基类中进行寻找,使用找到的第一个方法,数据.
    # class Foo:
    # def __init__(self,name,job):
    # self.name = name
    # self.job = job
    # def play(self):
    # print("play~!")
    # class Man(Foo):
    # def play(self):
    # print("play the game!")
    # class Women(Foo):
    # def spend(self):
    # print("are you demon?")
    # A = Man('AA','IT')
    # B = Women('BB','Teacher')
    # print(A.name) #AA Man类的对象A 继承了基类Foo中的构造方法.
    # A.play() #play the game! Man类的对象A 调用paly方法时没有使用基类中的play方法.使用自己本身定义的play方法.
    # print(B.job) #Teacher Women类的对象B 继承了基类Foo中的构造方法.
    # B.play() #play~! Women类的对象B 调用play方法时本身中没有play方法.去基类中寻找.使用基类中的play方法.
    # B.spend() #are you demon? ^^
    # 多态: 无论传入的是什么参数,只要是Foo类即可调用func方法.
    # class Foo:
    # def func(self,XX):
    # print("xx")
    # A = Foo()
    # A.func("BBB")
    # 2.面向对象变量分几种?
    # - 字段(实例变量):访问时使用对象访问字段
    # class Foo:
    # def __init__(self,name,age,weight):
    # self.name = name
    # self.age = age
    # self.__weight = weight
    # @property
    # def CHweight(self):
    # return int(self.__weight.upper().strip('KG'))*2 #在内部可以访问私有字段weight.
    # A = Foo('AA','18','60kg')
    # print(A.name,A.age) # AA 18 使用对象访问字段
    # print(A.CHweight) # 120
    # print(A.__weight) # 报错. 私有字段,在外部无法进行访问.
    # - 静态字段(静态变量):访问时使用类访问静态字段
    # class Person(object):
    # eyes = 2
    # mouth = 1
    # __edu = 12
    # def __init__(self,name,age):
    # self.name = name
    # self.age = age
    # A = Person('AA','18')
    # A.eyes = 3 # 可以通过赋值修改对象对应的类的静态字段,但不影响类本身,类本身的静态字段不会发生改变.
    # # A.__edu # 报错.私有静态字段无法再外部进行访问.
    # print(A.eyes)
    # print(Person.eyes) # 2 使用类访问静态字段
    # 3.面向对象中方法有哪几种?
    # - 实例方法:通过实例对象.由对象进行调用.
    # class Foo:
    # def func(self):
    # print("实例方法~")
    # A = Foo()
    # A.func() #实例方法~
    # - 静态方法:编写时在方法上方加上装饰器@staticmethod,参数可有可无,调用时类和对象都可以进行调用(对象.方法、类.方法)
    # class Foo:
    # @staticmethod
    # def func(XXX):
    # print(XXX)
    # @staticmethod
    # def func1():
    # print('hah')
    # A = Foo()
    # Foo.func1() #hah 通过类直接调用func1方法.
    # A.func1() #hah 通过对象调用func1方法.
    # A.func('func') #func 静态方法参数可有可无.
    # - 类方法:编写时在方法上方加上装饰器@classmethod,第一个参数cls默认传入类,调用时用类进行调用,默认传入当前类.
    # list = []
    # class Foo:
    # @classmethod
    # def func(cls):
    # for i in range(2):
    # i = cls
    # list.append(i)
    # class Foo2(Foo):
    # def fun(self):
    # pass
    # Foo.func()
    # Foo2.func()# 使用类调用方法.默认想第一个参数cls传入调用此方法的类
    # print(list)# [<class '__main__.Foo'>, <class '__main__.Foo'>, <class '__main__.Foo2'>, <class '__main__.Foo2'>]
    # 4.面向对象中的属性有什么? 通过方法改造出来的,在方法上加上@property使对象无需调用方法(不用加括号)即可拿到方法的返回值.伪装的像一个字段.(也有私有和公有之分)
    # class Foo(object):
    # def __init__(self):
    # pass
    # @property
    # def func(self):
    # return 1
    # A = Foo()
    # print(A.func)
    # 5.简述静态方法和类方法的区别:静态方法可以用对象调用也可以用类调用,而且参数可有可无.类方法只能用类进行调用,而且至少一个参数cls(传入调用方法的类)
    # 6.面向对象的方法中那个无需传参数:静态方法参数可有可无
    # 7.面向对象中的公有和私有成员编写和调用时的区别: 编写时:私有成员名称前需加'__',调用时:类的外部无法调用私有成员,只能内部调用,公有成员何处都可以调用.
  • 相关阅读:
    Java学习笔记(三)——运算符
    [镜像]镜像操作losetup
    [DNS]部署局域网DNS服务器
    [3G/4G]3G/4G模块开发
    [4G]常用AT指令
    [ubuntu]E: The package firmware-upgrade needs to be reinstalled, but I can't find an archive for it.
    [mmc]Linux下MMC/SD/SDIO的识别与操作
    [MMC]Linux MMC/SD/SDIO驱动分析
    [mmc]设备树节点含义
    [uboot]What is MLO file?
  • 原文地址:https://www.cnblogs.com/Treasuremy/p/9550985.html
Copyright © 2020-2023  润新知