一、类

1.1,构造函数,析构函数

#!/bin/python

class dog():
def __init__(self, age, name):
self.age = age
self.name = name
def print_self(self):
print('Dog name is %s' %(self.name))
print('Dog age is %d' %(self.age)) a = dog(10, 'alaski')
a.print_self()

输出结果:

Dog name is alaski
Dog age is 10

析构函数

#!/bin/python

class dog():
def __init__(self, age, name):
self.age = age
self.name = name
def print_self(self):
print('Dog name is %s' %(self.name))
print('Dog age is %d' %(self.age))
def __del__(self):
print("delete dog object %s" %(self.name)) a = dog(10, 'alaski')
a.print_self()

输出结果:

Dog name is alaski
Dog age is 10
delete dog object alaski

以上介绍了构造函数:__init__,析构函数:__del__。

1.2,变量

公有变量,私有变量

首先介绍一个背景,python对于类有个默认预定:

vvv:正常以a-z开头的变量,或者方法,python认定其为公有变量或者函数;

_vvv:(单前置下划线,私有化属性或方法,类对象和子类可以访问,from somemodule import *禁止导入)这个是从参考资料中查到的,我没有验证过【参考资料1】;

__vvv:如果以两个下划线开头,后面再接a-z的话,python认定其为私有变量或者函数;

__vv__:如果以两个下划线开头,并且两个下划线截止的格式,python认定其为保留格式,python用于内置函数或者扩展用法,应用程序杜绝这种写法,仅适用于python官方开发人员使用;

公有,私有变量

#!/bin/python

class dog():

    def __init__(self, age, name):
self.age = age
self.name = name
self.__type = 'dog' def print_self(self):
print('Dog name is %s' %(self.name))
print('Dog age is %d' %(self.age))
print('Animal type is %s' %(self.__type)) a = dog(10, 'alaski')
a.print_self()
print(a.name)
#AttributeError: 'dog' object has no attribute '__type'
print(a.__type)

输出结果:

Dog name is alaski
Dog age is 10
Animal type is dog
alask

1.3,函数

公有函数,私有函数

#!/bin/python

class dog():

    def __init__(self, age, name):
self.age = age
self.name = name
self.__type = 'dog' def print_self(self):
print('Dog name is %s' %(self.name))
print('Dog age is %d' %(self.age))
print('Animal type is %s' %(self.__type)) def smile(self):
print('Dog(%s) is smiling' %(self.name))
self.__set_smiling() def __set_smiling(self):
self.__attitude = 'smile' a = dog(10, 'alaski')
a.smile() #AttributeError: 'dog' object has no attribute '__set_smiling'
a.__set_smiling()

输出结果:

Dog(alaski) is smiling

可以看到,dog类中的私有函数为__set_smiling,它可以被类中的函数调用,但是无法在类外使用(使用会报错)。

1.4,static变量和函数

目前我查到的资料中显示,python并不天然支持static变量和static函数。

二,继承

2.1,继承

#!/bin/python

class person:
def __init__(self):
print("person is intialized")
def say(self):
print("person is saying") class driver(person):
def __init__(self):
super().__init__()
print("i am a driver")
def say(self):
print("driver is saying") a = driver()
a.say()

输出结果:

person is intialized
i am a driver
driver is saying

driver继承了person类,并在初始化的时候调用了父类的初始化构造函数。

2.2,父类的私有类是否能被继承?

如果父类的函数是私有函数,也就是以__开头的,是不允许子类访问的。

代码:

#!/bin/python

class person:
def __init__(self):
print("person is intialized")
def say(self):
print("person is saying")
def __say_to_self(self):
print('i am saying sth to myself') class driver(person):
def __init__(self):
super().__init__()
super().__say_to_self()
print("i am a driver") def say(self):
print("driver is saying") a = driver()
a.say()

报错:

person is intialized
Traceback (most recent call last):
File "class2.py", line 20, in <module>
a = driver()
File "class2.py", line 14, in __init__
super().__say_to_self()
AttributeError: 'super' object has no attribute '_driver__say_to_self'

2.3,设定某些函数可以被自身及其子类所访问

#!/bin/python

class person:
def __init__(self):
print("person is intialized")
def say(self):
print("person is saying")
def __say_to_self(self):
print('i am saying sth to myself')
def _say_to_other(self):
print('i am saying sth to other, and the saying is listened by all of them') class driver(person):
def __init__(self):
super().__init__()
super()._say_to_other()
print("i am a driver") def say(self):
print("driver is saying") a = driver()
a._say_to_other()

输出:

person is intialized
i am saying sth to other, and the saying is listened by all of them
i am a driver
i am saying sth to other, and the saying is listened by all of them

设定的_say_to_other是可以被子类所访问的,但是它和c++中的protected不一样。以单个下划线开头的函数,和公开方法是一样的,既可以被自身和子类访问,又能在类外所访问。

三、导入类

3.1,导入单个类

文件: car.py
#!/bin/python class Car:
year = 0
brand = ''
series = '' def __init__(self, brand, series, year):
self.brand = brand
self.series = series
self.year = year def get_car_desc(self):
desc = ''
desc += ("car info: [year:%d] [brand:%s] [series:%s]" % (self.year, self.brand, self.series))
return desc 文件: my_car.py
#!/bin/python
from car import Car c = Car('tesla', 'Model X', 2016)
d = c.get_car_desc()
print(d)

可以在my_car.py中引入类Car,引用时候使用from car import Car

from [A] import [B]

A要和文件名前缀保持一致,B要和类名保持一致,并且要区分大小写。

3.2,在一个模块中存储多个类

文件:car.py
#!/bin/python class Car:
year = 0
brand = ''
series = '' def __init__(self, brand, series, year):
self.brand = brand
self.series = series
self.year = year def get_car_desc(self):
desc = ''
desc += ("car info: [year:%d] [brand:%s] [series:%s]" % (self.year, self.brand, self.series))
return desc class ElectricCar(Car):
def __init__(self, brand, series, year):
super().__init__(brand, series, year) def get_range():
return "100 miles" 文件:my_car.py
#!/bin/python
from car import Car
from car import ElectricCar c = Car('bmw', 'X3', 2016)
d = c.get_car_desc()
print(d) tesla = ElectricCar('tesla', 'Model S', 2017)
d = tesla.get_car_desc()
print(d)

3.3,从一个模块中导入多个类

和3.2公用一个例子

from car import Car, ElectricCar可以存储和导入多个类

3.4,导入整个模块

#!/bin/python

import car 

c = car.Car('Nissan', 'Sylphy', 2012)
print(c.get_car_desc())

car.py仍然使用之前的文件,但是my_car.py需要修改下。

导入整个模块使用import car,但是初始化实例时候需要使用全称,不能简化:a = car.Car()这种方式。

参考资料:

1,https://www.cnblogs.com/semon-code/p/8242062.html

24 【python入门指南】class的更多相关文章

  1. Python入门指南(超详细)

    Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫.但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑科技.本文主要针对的读者是: 毫无 ...

  2. Python 入门指南

    Release: 3.4 Date: March 29, 2014 Python 是一门简单易学且功能强大的编程语言. 它拥有高效的高级数据结构,并且能够用简单而又高效的方式进行面向对象编程. Pyt ...

  3. 25 【python入门指南】如何编写测试代码

    python如何编写测试代码 python内置了unittest,使得写应用层的单元测试变得超乎寻常的简单. 1,执行单个测试函数 #!/bin/python import unittest clas ...

  4. python入门教程链接

    python安装 选择 2.7及以上版本 linux: 一般都自带 windows: https://www.python.org/downloads/windows/ mac os: https:/ ...

  5. Python入门一:简单得不能再简单了##

    从python的语法上看,简单得不能再简单了. 想学它,请移步廖雪峰python2.7教程以及python3.这实在是最好的入门教程.参考资料太多: 外国的教程 Python 入门指南 Python ...

  6. Python不完全入门指南

    适用范围: 有一定编程基础,想快速入门python的人群 说明: 使用jupyter notebook编写,可以使用nbviewer网站进行查看. Python不完全入门指南 项目放在github上, ...

  7. Python 30分钟入门指南

    Python 30分钟入门指南 为什么 OIer 要学 Python? Python 语言特性简洁明了,使用 Python 写测试数据生成器和对拍器,比编写 C++ 事半功倍. Python 学习成本 ...

  8. Python 30分钟快速入门指南

    学习地址 中文版:Python 30分钟入门指南 英文版:Learn X in Y minutes 学习时间 2019/03/10 19:00 - 19:32,多用了2分钟.

  9. Python 极速入门指南

    前言 转载于本人博客. 面向有编程经验者的极速入门指南. 大部分内容简化于 W3School,翻译不一定准确,因此标注了英文. 包括代码一共两万字符左右,预计阅读时间一小时. 目前我的博客长文显示效果 ...

随机推荐

  1. DirectShow设置采集帧率码率YUV<转>

    // 设置参数,p1=宽,p2=高,p3=帧率 AM_MEDIA_TYPE *p = NULL; IAMStreamConfig *pSC = NULL; pCGB2->FindInterfac ...

  2. Centos7升级新内核

    由于觉得Centos7内核版本还不够高,就想升级下,下面是升级步骤 我使用的方法是使用yum升级内核 使用第三方仓库升级 CentOS 允许使用 ELRepo,这是一个第三方仓库,可以将内核升级到最新 ...

  3. python 问答

    1.list和tuple有什么区别? list是可变的,可以添加list.append,可以插入list.insert,可以改变元素值list[2] ='a':而tuple在初始化的时候就确定了,不能 ...

  4. DNS协议工作过程;DNS的安全隐患

    DNS协议工作过程   下面以域名为m.xyz.com的主机欲通过另一个主机的域名y.abc.com的IP地址为例,简述DNS协议过程. 主机m.xyz.com先向其本地服务器dns.xyz.com进 ...

  5. Delphi接口的底层实现

    引言 接口是面向对象程序语言中一个很重要的元素,它被描述为一组服务的集合,对于客户端来说,我们关心的只是提供的服务,而不必关心服务是如何实现的:对于服务端的类来说,如果它想实现某种服务,实现与该服务相 ...

  6. MOSS 2007 错误0x80040E14解决

    今天公司内网莫名的出现错误,只能新建列表条目,不能创建网站,到后来列表条目也不能创建了,一直报0x80040E14错误.于是Google一把,搜索这个错误号,然后在apearce 的Blog找到了原因 ...

  7. 做好Unity4.x开发项目规划

    1. 是否要用lua 2. (对于需操作的游戏)客户端游戏如何做战斗验证 下面列举小坑吧.不建议都绕开,毕竟没有那么多时间做前期调研的. 对应版本Unity4.x 1. 客户端程序层面 总的来说C#超 ...

  8. MD5加密和彩虹表

    首先叙述一下彩虹表的原理.本部分内容.图片和例子基本来自英文维基的Rainbow table词条(Rainbow table)——中文维基中目前(2013年10月9日)尚无对应的词条——因此对本答案中 ...

  9. hdu3826-Squarefree number-(欧拉筛+唯一分解定理)

    Squarefree number Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  10. curl get请求

    curl --proxy 192.168.1.159:8889  -d "grant_type=client_credential&appid=wxxx&secret=xxx ...