python类初探
class human:
is_alive=True
is_man=True
def __init__(self,age):
print('this is __init__() method, which will be executed automaticly!')
self.nianling=age
print('the age is: ',self.nianling)
def setdata(self,name):
self.name=name
def printdata(self):
print(self.name)
h=human(22)
#the running result is:
'''
this is __init__() method, which will be executed automaticly!
the age is: 22
'''
类的定义格式是:class leiming:
类的__init__(self)方法被任何实例自动调用,我称此方法为类的初始化函数。self是啥,这个参数是Python特有的,当__init__()被自动调用的时候,实例对象作为第一个参数被传递了进去。
class dog():
def __init__(self):
print('init the class dog')
print(self)
dog1=dog()
print(dog1)
'''
init the class dog
<__main__.dog object at 0x000000000234F278>
<__main__.dog object at 0x000000000234F278>
可以看到self的地址和dog1对象的地址是一样的。
'''
类中包含属性和方法。所谓属性就是对类的特点进行定义。比如定义一个鸟类,这个类具有属性或者说特点:都有翅膀。
class bird:
def __init__(self):
print('This is __init__() method, which will be executed automaticly!','\n'
'All of us have wing!')
h=bird()
#the running result is:
'''
This is __init__() method, which will be executed automaticly!
All of us have wing!s
'''
类的属性可以定义在类内,也可以定义在类外,比如:
class xin:
pass
xin.name='杨过'
xin.age=22
xin.sex='male'
x=xin()
print('我的名字是:',x.name)
print('我的性别是:',x.sex)
print('我的年龄是:',x.age)
'''
我的名字是: 杨过
我的性别是: male
我的年龄是: 22
'''
类的属性在类内定义,实例的属性通过self.shuxing=... 赋值定义。
class sky:
color='blue'
def __init__(self,name):
print('我会被自动执行的哦!')
self.mingzi=name
def f1(self,age):
self.nianling=age
def display(self):
print('我的年龄是:',self.nianling)
p1=sky('杨过')
print(sky.color)
print('我的名字是:',p1.mingzi)
p1.f1(23)
p1.display()
'''
我会被自动执行的哦!
blue
我的名字是: 杨过
我的年龄是: 23
'''
每个实例对象都会继承类的属性,并且可以在方法内通过self做赋值产生每个实例自己的属性。
class sky:
color='blue'
def __init__(self,name):
print('我会被自动执行的哦!')
self.mingzi=name
def f1(self,age):
self.nianling=age
def display(self):
print('我的年龄是:',self.nianling)
p1=sky('杨过')
p2=sky('小龙女')
print(sky.color,p1.color)
print('我的名字是:',p1.mingzi)
print('我的名字是:',p2.mingzi)
p1.f1(23)
p2.f1(22)
p1.display()
p2.display()
'''
我会被自动执行的哦!
我会被自动执行的哦!
blue blue
我的名字是: 杨过
我的名字是: 小龙女
我的年龄是: 23
我的年龄是: 22
'''
继承:
class first:
def me(self):
print('I am first!')
class second(first):
def me(self):
print('I am second!')
first.me(self)#你(类second)继承了它(类first),你便可以调用它的方法
print('.....end......')
s1=second()
s1.me()
'''
I am second!
I am first!
.....end......
'''
'类属性'这三个字的理解:
为什么要叫类属性呢,因为这个属性是和类绑定的,并不是和实例绑定的。胎生这个属性是全人类共有的,并不是某个人特殊拥有的属性。
class Human:
taisheng = True
p1=Human()
print(Human.taisheng)
'''
True
'''
类内的初试化方法,每个类实力都可以随意修改里面的参数,这使得代码不健壮,封装性不好。此时把__init__()方法里面的属性之前附加两个下划线就可以阻止实例访问此方法了。
class human:
def __init__(self,name):
self.name=name
def walk(self):
print(self.__name+' is running!')
p1=human('liudehua')
print(p1.name)
'''
实例正常访问__init__()方法中定义的实例属性
liudehua
''' class human:
def __init__(self,name):
self.__name=name
def walk(self):
print(self.__name+' is running!')
p1=human('liudehua')
print(p1.__name)
'''
__init__()中定义实例的属性时,属性变量之前附加两个下划线,实例就无法再访问了。
Traceback (most recent call last):
File "D:/good/s12_1/star/c.py", line 7, in <module>
print(p1.__name)
AttributeError: 'human' object has no attribute '__name'
'''
如果仍想访问,就再增加个get接口。
class human:
def __init__(self,name):
self.__name=name
def get_name(self):
return self.__name
p1=human('林志玲')
print('One of the first beauty in society is :',p1.get_name())
'''
__init__()中定义实例的属性时,属性变量之前附加两个下划线,实例就无法再访问了。
但可以再定义一个改变各个实例属性的接口get_name()函数:
One of the first beauty in society is : 林志玲
'''
如果想修改已定义的实例的属性,就再定义个修改的接口:
#如果想修改实例的属性,就再定义一个修个的接口:
class human:
def __init__(self,name):
self.__name=name
def get_name(self):
return self.__name
def set_name(self,name):
self.__name=name
p1=human('林志玲')
print(p1.get_name())
p1.set_name('王菲')
print(p1.get_name()) '''
林志玲
王菲
'''
哺乳动物是动物的一种,哺乳动物是动物的子类,子类拥有父类的属性、方法,即继承。同时又可以拥有父类没有的属性和方法,即多态。
class human:
def __init__(self,name):
self.__name=name
def walk(self):
print(self.name+' is running!')
def get_name(self):
return self.__name
def set_name(self,name):
self.__name=name
class man(human):#此为继承
def __init__(self,name,has_wife):
super(man,self).__init__(name)#super(Man, self).__init__(name)等价于调
# 用了父类Human的构造函数,就不用再复制粘贴一遍self.__name=name了。
self.has_wife=has_wife
def smoke(self):
print('Man like smoking!')
def mustache(self):
print('Man have to remove mustache everyday!')
class woman(human):#此为继承
def __init__(self,name,has_husband):
super(woman,self).__init__(name)
self.has_hasband=has_husband
def shopping(self):
print('Woman like buying ,buying and buying!')
def make_up(self):
print('Woman like making up!')
m1=man('周杰伦','Yes')
m2=woman('林志玲','No')
print(m1.has_wife)
m1.smoke()
m1.mustache()
print(m2.has_hasband)
m2.shopping()
m2.make_up()
'''
Yes
Man like smoking!
Man have to remove mustache everyday!
No
Woman like buying ,buying and buying!
Woman like making up!
'''
python类初探的更多相关文章
- 进击的Python【第一章】:Python背景初探与Python基础(一)
Python背景初探 一.Python起源 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做 ...
- Python 3 初探,第 2 部分: 高级主题
Python 3 是 Guido van Rossum 功能强大的通用编程语言的最新版本.它虽然打破了与 2.x 版本的向后兼容性,但却清理了某些语法方面的问题.本文是这个由两部分组成的系列文章中的第 ...
- Python类中super()和__init__()的关系
Python类中super()和__init__()的关系 1.单继承时super()和__init__()实现的功能是类似的 class Base(object): def __init__(sel ...
- LightMysql:为方便操作MySQL而封装的Python类
原文链接:http://www.danfengcao.info/python/2015/12/26/lightweight-python-mysql-class.html mysqldb是Python ...
- python 类属性与方法
Python 类属性与方法 标签(空格分隔): Python Python的访问限制 Python支持面向对象,其对属性的权限控制通过属性名来实现,如果一个属性有双下划线开头(__),该属性就无法被外 ...
- python 类以及单例模式
python 也有面向对象的思想,则一切皆对象 python 中定义一个类: class student: count = 0 books = [] def __init__(self ...
- Python类的特点 (1):构造函数与方法
Python中,类的特点: #encoding:utf-8 class Parent(object): x=1 #x是Parent类的属性(字段) def __init__(self): print ...
- Python类属性,实例属性
1.Python类数据属性:定义在类里面但在函数外面的变量,它们都是静态的. #一段很简单的代码,但反应了很多 >>> class A(): a=1 #一个类里面有个属性a > ...
- python类及其方法
python类及其方法 一.介绍 在 Python 中,面向对象编程主要有两个主题,就是类和类实例类与实例:类与实例相互关联着:类是对象的定义,而实例是"真正的实物",它存放了类中 ...
随机推荐
- JAVA_Error initializing endpoint怎么办
1 运行CMD,输入命令netstat –ano,找到这个TCP,后缀为8080的PID(我的是2660),然后打开任务管理器,在进程选项卡中打开PID查看 2 在右侧的进程窗口找到PID是左侧的 ...
- opengl加载多个3ds模型失败记
VC6 下载 http://blog.csdn.net/bcbobo21cn/article/details/44200205 opengl环境配置 http://blog.csdn.net/bcbo ...
- Xshell 一款很养眼的配色方案推荐
Xshell 是个很好用的在 windows 下登陆 liunx 的终端原生支持中文,配合 Xftp 管理文件,同是免费软件可远比 Putty 好用多了面对枯燥的代码,我们需要一款很养眼的配色方案来保 ...
- Spring Security 表单登录
1. 简介 本文将重点介绍使用Spring Security登录. 本文将构建在之前简单的Spring MVC示例之上,因为这是设置Web应用程序和登录机制的必不可少的. 2. Maven 依赖 要将 ...
- 对‘TIFFReadDirectory@LIBTIFF_4.0’未定义的引用-------------- 解决办法
ABLE_DEPRECATED' is defined [-Winvalid-pch] //usr/lib/libvtkIO.so.5.10:对‘TIFFReadDirectory@LIBTIFF_4 ...
- java.util.Date和java.sql.Date之间的转换
java.util.Date是在除了SQL语句的情况下面使用的.java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分它 们都有getTime方法返回毫秒数,自然就可以直接构建. ...
- AI生万物,新世界的大门已敞开
四月是万物复苏的时节,一年一度的GMIC全球移动互联网大会也在这个时间如期而至,在4月26日-28日的会议期间,有超过三百位行业专家进行了精彩的演讲,更有数万名现场观众感受到思维碰撞迸发出的火花. 作 ...
- SQL Server 的collate的含义
什么叫排序规则呢?MS是这样描述的:"在 Microsoft SQL Server 2000 中,字符串的物理存储由排序规则控制.排序规则指定表示每个字符的位模式以及存储和比较字符所使用的规 ...
- redis写磁盘报错Cannot allocate memory
查看 Redis 日志发现系统在频繁报错: [1821] 10 Nov 09:59:04.086 # Can't save in background: fork: Cannot allocate m ...
- Go 语言从新手到大神:每个人都会踩的五十个坑(转)
Go语言是一个简单却蕴含深意的语言.但是,即便号称是最简单的C语言,都能总结出一本<C陷阱与缺陷>,更何况Go语言呢.Go语言中的许多坑其实并不是因为Go自身的问题.一些错误你再别的语言中 ...