首页 技术 正文
技术 2022年11月8日
0 收藏 888 点赞 1,924 浏览 8021 个字

1.类与对象(构造方法与实例化)

#!/usr/bin/env python# _*_ coding:UTF-8 _*_class Province:    def __init__(self, name, capital, leader):        self.name = name        self.capital = capital        self.leader = leaderif __name__ == "__main__":    hebei = Province("河北", "石家庄", "刘道强")    print hebei.name    print hebei.capital    print hebei.leader

结果:

/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/day05/day18/Province.py河北石家庄刘道强Process finished with exit code 0

注意:定义构造方法使用__init__方法

2.动态字段与静态字段

#!/usr/bin/env python# _*_ coding:UTF-8 _*_class Province:    memo = "中国的23个省之一"    def __init__(self, name, capital, leader):        self.name = name        self.capital = capital        self.leader = leaderif __name__ == "__main__":    hebei = Province("河北", "石家庄", "刘道强")    print hebei.name    print hebei.capital    print hebei.leader    print hebei.memo    print Province.memo

结果:

/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/day05/day18/Province.py河北石家庄刘道强中国的23个省之一中国的23个省之一Process finished with exit code 0

注意:

(1)类不能访问动态字段

(2)对象可以访问静态字段

3.动态方法与静态方法

#!/usr/bin/env python# _*_ coding:UTF-8 _*_class Province:    memo = "中国的23个省之一"    def __init__(self, name, capital, leader):        self.name = name        self.capital = capital        self.leader = leader    def sports_meeting(self):        return self.name + "正在开运动会"    @staticmethod    def foo():        return "每个省都在反腐"if __name__ == "__main__":    hebei = Province("河北", "石家庄", "刘道强")    print hebei.name    print hebei.capital    print hebei.leader    print hebei.memo    print Province.memo    print hebei.sports_meeting()    print hebei.foo()    print Province.foo()

结果:

/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/day05/day18/Province.py河北石家庄刘道强中国的23个省之一中国的23个省之一河北正在开运动会每个省都在反腐每个省都在反腐Process finished with exit code 0

注意:

(1)类不能访问动态方法

(2)对象可以方位静态方法

(3)在动态方法上增加@staticmethod并去除self参数则为动态方法

4.特性

#!/usr/bin/env python# _*_ coding:UTF-8 _*_class Province:    memo = "中国的23个省之一"    def __init__(self, name, capital, leader):        self.name = name        self.capital = capital        self.leader = leader    def sports_meeting(self):        return self.name + "正在开运动会"    @staticmethod    def foo():        return "每个省都在反腐"    @property    def bar(self):        return self.nameif __name__ == "__main__":    hebei = Province("河北", "石家庄", "刘道强")    print hebei.name    print hebei.capital    print hebei.leader    print hebei.memo    print Province.memo    print hebei.sports_meeting()    print hebei.foo()    print Province.foo()    print hebei.bar

结果:

/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/day05/day18/Province.py河北石家庄刘道强中国的23个省之一中国的23个省之一河北正在开运动会每个省都在反腐每个省都在反腐河北Process finished with exit code 0

注意:

(1)在方法上增加@property则该方法变为字段访问

5.面向对象中动态方法与静态方法的比较

(1)使用动态方法适合于业务类;适用于对象数量较少的情况

(2)使用静态方法适合于工具类;适用于对象数量较多的情况,当对象较多则创建对象占用大量的内存这时应该使用静态方法

6.私有字段与私有方法

#!/usr/bin/env python# _*_ coding:UTF-8 _*_class Province:    memo = "中国的23个省之一"    def __init__(self, name, capital, leader, __thailand):        self.name = name        self.capital = capital        self.leader = leader        self.__thailand = __thailand    def sports_meeting(self):        return self.name + "正在开运动会"    @staticmethod    def foo():        return "每个省都在反腐"    @property    def bar(self):        return self.name    @property    def thailand(self):        return self.__thailandif __name__ == "__main__":    hebei = Province("河北", "石家庄", "刘道强", True)    print hebei.name    print hebei.capital    print hebei.leader    print hebei.memo    print Province.memo    print hebei.sports_meeting()    print hebei.foo()    print Province.foo()    print hebei.bar    print hebei.thailand

结果:

/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/day05/day18/Province.py河北石家庄刘道强中国的23个省之一中国的23个省之一河北正在开运动会每个省都在反腐每个省都在反腐河北TrueProcess finished with exit code 0

注意:

(1)任何暴露给外部是无用的,或者为了安全不能暴露给外部的字段和方法需要设置为私有;设置私有字段和私有方法只需在前边加上两个下划线即可

(2)私有字段在类内部可以直接访问,在类外部不能访问,可以通过实现特性来访问私有字段

(3)私有方法在类内部可以直接访问,在类外部不能访问,可以通过封装共有方法来访问私有方法

7.只读特性与可写特性

#!/usr/bin/env python# _*_ coding:UTF-8 _*_class Province:    memo = "中国的23个省之一"    def __init__(self, name, capital, leader, __thailand):        self.name = name        self.capital = capital        self.leader = leader        self.__thailand = __thailand    def sports_meeting(self):        return self.name + "正在开运动会"    @staticmethod    def foo():        return "每个省都在反腐"    @property    def bar(self):        return self.name    @property    def thailand(self):        return self.__thailand    @thailand.setter    def thailand(self, __thailand):        self.__thailand = __thailandif __name__ == "__main__":    hebei = Province("河北", "石家庄", "刘道强", True)    print hebei.name    print hebei.capital    print hebei.leader    print hebei.memo    print Province.memo    print hebei.sports_meeting()    print hebei.foo()    print Province.foo()    print hebei.bar    print hebei.thailand    hebei.thailand = False    print hebei.thailand

结果:

/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/day05/day18/Province.py河北石家庄刘道强中国的23个省之一中国的23个省之一河北正在开运动会每个省都在反腐每个省都在反腐河北TrueFalseProcess finished with exit code 0
/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/day05/day18/Province.py河北石家庄刘道强中国的23个省之一中国的23个省之一河北正在开运动会每个省都在反腐每个省都在反腐河北TrueFalseProcess finished with exit code 0

注意

(1)使用@property装饰器则私有字段可读;使用@field.setter则私有字段可写

8.构造方法__init__(),析构方法__del__()和__call__()

#!/usr/bin/env python# _*_ coding:UTF-8 _*_class Province:    memo = "中国的23个省之一"    def __init__(self, name, capital, leader, __thailand):        self.name = name        self.capital = capital        self.leader = leader        self.__thailand = __thailand    def __call__(self, *args, **kwargs):        print "CALL"    def __del__(self):        print "DELETE"    def sports_meeting(self):        return self.name + "正在开运动会"    @staticmethod    def foo():        return "每个省都在反腐"    @property    def bar(self):        return self.name    @property    def thailand(self):        return self.__thailand    @thailand.setter    def thailand(self, __thailand):        self.__thailand = __thailandif __name__ == "__main__":    hebei = Province("河北", "石家庄", "刘道强", True)    print hebei.name    print hebei.capital    print hebei.leader    print hebei.memo    print Province.memo    print hebei.sports_meeting()    print hebei.foo()    print Province.foo()    print hebei.bar    print hebei.thailand    hebei.thailand = False    print hebei.thailand    hebei()

结果:

/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/day05/day18/Province.py河北石家庄刘道强中国的23个省之一中国的23个省之一河北正在开运动会每个省都在反腐每个省都在反腐河北TrueFalseCALLDELETEProcess finished with exit code 0

注意:

__init__(self)在创建对象的时候触发调用

__del__(self)在销毁对象的时候触发调用

__call__(self)在对象()调用时触发调用

9.类的继承

#!/usr/bin/env python# _*_ coding:UTF-8 _*_class Base:    def __int__(self):        pass    def __call__(self, *args, **kwargs):        pass    def __del__(self):        pass    def foo(self):        print "foo"    def bar(self):        print "bar"class Derive(Base):    def __int__(self):        pass    def __call__(self, *args, **kwargs):        pass    def __del__(self):        pass    def bar(self):        Base.bar(self)        print "derive"if __name__ == "__main__":    base = Base()    base.foo()    base.bar()    derive = Derive()    derive.foo()    derive.bar()

结果:

/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/day05/day18/extend_test.pyfoobarfoobarderiveProcess finished with exit code 0

注意:

(1)继承只需要的类名的后面加上基类的名称

(2)调用基类的方法则用Base.bar(self)

10. 多继承

经典类的深度优先多继承:

#!/usr/bin/env python# _*_ coding:UTF-8 _*_class A:    def __init__(self):        print "init A"    def save(self):        print "save from A"class B(A):    def __init__(self):        print "init B"class C(A):    def __init__(self):        print "init C"    def save(self):        print "save from C"class D(B, C):    def __init__(self):        print "init D"if __name__ == "__main__":    d = D()    d.save()

结果:

/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/day05/day18/object_test.pyinit Dsave from AProcess finished with exit code 0

新式类的广度优先多继承:

#!/usr/bin/env python# _*_ coding:UTF-8 _*_class A(object):    def __init__(self):        print "init A"    def save(self):        print "save from A"class B(A):    def __init__(self):        print "init B"class C(A):    def __init__(self):        print "init C"    def save(self):        print "save from C"class D(B, C):    def __init__(self):        print "init D"if __name__ == "__main__":    d = D()    d.save()

结果:

/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/day05/day18/object_test.pyinit Dsave from CProcess finished with exit code 0

注意:

(1)python中的类如果不继承object则为经典类,如果继承object类则为新式类

(2)经典类的多继承采用深度优先算法继承,新式类的多继承采用广度优先算法继承

11.接口,抽象类,抽象方法

例如:

#!/usr/bin/env python# _*_ coding:UTF-8 _*_from abc import ABCMeta, abstractmethodclass Foo:    __metaclass__ = ABCMeta    def save(self):        passclass Bar(Foo):    def __init__(self):        print "init Bar"    def save(self):        print "save from Bar"if __name__ == "__main__":    bar = Bar()    bar.save()

结果:

/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/day05/day18/abstract_test.pyinit Barsave from BarProcess finished with exit code 0

注意:

(1)抽象类中只有抽象方法即为借口

(2)类中有__metaclass__ = ABCMeta的类即为抽象类;方法被@abstractmethod装饰即为抽象方法

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,942
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,468
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,281
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,095
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,728
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,765