Python 类和对象-上
#类和对象
class Human:
#属性 -> 成员属性(变量)
ear = 2
mouth = 1
sex = 'man'
age = 28
name = 'zhangwang'
married = False
color = 'yellow'
#特征 -> 成员方法(函数)
def walk(self):
print('直立行走') def eat(self):
print('吃饭') def sleep(self):
print('睡觉') def playgame(self):
print('打游戏') #查看类的值
print(Human) #类的类型
print(type(Human)) #实例化对象操作
wangwang = Human() #打印对象的值
print(wangwang) #打印对象的类型
print(type(wangwang)) #检测类的成员(在类中声明的成员都可以看到)
print(Human.__dict__) #检测对象中的成员
print(wangwang.__dict__)
print(wangwang.sex) class GF:
#属性
sex = '女'
age = 18
height = ''
weight = '50kg'
threeWei = ('36E','2.1','108CM')
#方法
def guang(self):
print('guang')
def eat(self):
print('chi')
def cry(self):
print('wu')
#类的基本操作
#访问
print(GF.sex)#属性
GF.eat(1)#方法
#修改
print(GF.age)
GF.age = 22#属性
print(GF.__dict__)
#定义一个函数
'''
def mycry():
print('Do not cry')
GF.cry = lambda :print('啊呜')#方法
GF.cry = mycry#方法
GF.cry()
'''
#添加
GF.hobby = 'act'#属性
print(GF.__dict__)
GF.upsky = lambda : print('upsky')#方法
GF.upsky()
#删除
del GF.threeWei
print(GF.__dict__)
del GF.cry
print(GF.__dict__)
#对象的基本操作
bingbing = GF()
print(bingbing.__dict__)
#访问
print(bingbing.sex)#属性
bingbing.eat()#方法
#修改
bingbing.age = 28 #属性 修改属性只会影响当前对象本身
print(bingbing.__dict__)
bingbing.cry = lambda : print('bigcry')
print(bingbing.__dict__)
bingbing.cry()
#添加操作
bingbing.cloth = '一袭长裙'#属性
print(bingbing.__dict__)
bingbing.walk = lambda : print('走红毯')#方法
print(bingbing.__dict__)
bingbing.walk()
#删除
bingbing.water = 'more'
bingbing.action = lambda : print('专业演员')
print(bingbing.__dict__)
del bingbing.water#属性
del bingbing.action#方法
print(bingbing.__dict__) #关于self
'''
通过类调用的函数: 绑定类的方法
通过对象调用的函数: 非绑定类的方法
'''
class Human:
#属性
age = 18
sex = 'female'
name = 'sanpao' #方法
def eat(self):
print(self)#通过类来调用的时候self只是函数的一个普通形参,必须给实参!
print('吃西瓜') def drink(self):
print(self)#通过对象调用的时候self接受的肯定是当前的对象!此处的self不是关键字 只是一个形参,名字可以修改,但是推荐用self
print('喝西瓜汁') #绑定类的方法(肯定)
def la():
print('puchi') #绑定类的方法/非绑定类的方法(取决于怎么使用)
def sa(arg):
print('hualala') #通过类调用
Human.eat('nidaye') #通过对象调用
zw = Human
zw.drink(1) #类来访问sa方法(绑定类的方法)
Human.sa(1) #通过对象方法sa方法(非绑定类的方法)
zw.sa(1) #人类
class Human:
#属性
age = 18
#私有化封装成员属性[只能在当前结构中使用]
__sex = 'male'
color = 'yellow'
hair = 'black' #方法
def say(self):
print('ayi') def walk(self):
print('sousou') #私有化成员方法(只能在当前类或者对象的结构中访问)
def __niao(self):
print('xuxu') #测试:自己访问自己的私有成员
def demo(self):
#访问私有方法niao
self.__niao()
print('测试私有成员的访问') #实例化对象
tbw = Human() #调用tbw的成员
'''
print(tbw.age)
print(tbw.hair)
print(tbw.color) tbw.say()
tbw.walk()
'''
#相当于别人叫你的名字 想查看你的性别[私有化成员不可以在类/对象的当前结构外访问]
#print(tbw.sex) #tbw.niao() #访问测试方法demo[私有化成员可以在类/对象的当前结构中访问]
#tbw.demo() #Python对私有成员的封装实际上使用了改名策略(name mangling)
print(Human.__dict__)
print(tbw._Human__sex)
tbw._Human__niao() print(Human._Human__sex)
Human._Human__niao(1)
#继承
#刘备类:父类 -> 被其他类继承的类称之为父类(超类,基类)
class LiuBei:
#属性
familyname = '刘'
firsttime = '备'
sex = 'man'
money = ''
country = '蜀国'
wife = ('甘夫人','糜夫人','孙尚香')
#方法
def say(self):
print('险损我一员大将') #非绑定类的方法[对象访问]
def drink(self):
print(self)
print('来干了这杯') def walk(self):
print('gogo') #绑定类的方法
def la():
print('hualala') #刘禅类:子类 -> 继承其他类的类称之为子类(派生类)
class LiuShan(LiuBei):
#子类独有的成员
#属性
weight = '180斤' #方法
def douququ(self):
print('此间乐,不思蜀') #重载父类方法
def say(self):
print('刘备baba') #重载父类的drink方法,但是还要将父类中操作拿过来使用
def drink(self):
print('举起筷子,夹一口菜')
#喝酒 通过对象调用的方法的重载(推荐使用super().方法名())
super().drink() #LiuBei.drink(self) #重载父类的la方法,但是还要将父类中操作拿过来使用
def la():
print('准备好纸')
#调用父类的la方法(推荐使用类名.方法名)
LiuBei.la() #查看刘禅类
print(LiuShan.__dict__)#继承操作不会将成员直接复制到子类中
print(LiuShan.sex)
LiuShan.walk(1)
#print(LiuShan.wife)
'''
1.所有的类的父类都是object子类
2.子类继承父类则可以访问父类的所有成员.(私有成员除外)
3.子类继承父类并不会将父类的所有成员复制到子类当中去,访问父类成员是间接通过父类来访问的(目的:节省资源)
4.子类可以具有自己独有的属性和方法
5.子类可以重载父类中的方法,只需要设置和父类指定成员相同的名称即可实现重载,重载之后的成员,子类只会访问当前类中的成员,而不会调用父类中同名的成员
6.子类中如果重载父类的方法,并且还想将重载的父类方法借调过来使用,可以在重载的方法中使用如下方法
[父类名.方法()](适合类) 或者 [super().方法()](适合对象)
'''
result = issubclass(type,object)
print(result) #访问子类独有的成员
LiuShan.douququ(1)
print(LiuShan.weight) #访问继承来的方法
LiuShan.say(1) #访问重载并且调用了父类的方法的方法
LiuShan.la() ls = LiuShan()
ls.drink() #Python语法中没有受保护的语法,程序员约定一种操作来实现受保护
class Father:
#属性
sex = 'man'
#受保护的
_money = 1000
color = 'yellow'
#私有化
__wife = 'bingbing' #方法
def eat(self):
print(Father._money)
print('吃吃吃') def niao(self):
print('哗哗哗') class Son(Father):
#添加一个子类的方法用于测试子类中的访问
def test():
#方式访问父类中私有成员
#print(Father.wife)
#print(Son.wife)
#访问父类中公共的成员
print(Son.color)
#访问受保护的成员
print(Son._money) Son.test()
Father.eat(1)
print(Father._money)
#受保护的定义
'''
私有化:只能在类或者对象的结构中访问
公共的:可以在任何位置访问
受保护:可以在当前类或者对象 和子类或者子类对象中访问 类内 子类中 类外部
私有化: √ × ×
受保护: √ √ √(×类外部应该不能访问)
公共的: √ √ √
''' #单继承 class Biology:
#属性
life = '活的'
#方法
def shengzhi(self):
print('生育后代') class animal(Biology):
#属性
age = 18
#方法
def jiao(self):
print('叫两声听听') class mammal(animal):
#属性
gen = '胎生'
#方法
def weinai(self):
print('干了这杯奶') class Human(mammal):
#属性
name = '囡囡' def dapai(self):
print('王炸') #实例化对象操作
zb = Human()
zb.dapai()
zb.weinai()
zb.jiao()
zb.shengzhi() #多继承 class GrandPa:
def damajiang(self):
print('大三元') class GrandMa:
def doudizhu(self):
print('飞机') class LaoLao:
def dance(self):
print('弯弯的河水天上来') class LaoYe:
def zhajinhua(self):
print('哗哗哗') class PaPa:
def zhuanqian(self):
print('赚钱') class MaMa:
def huaqian(self):
print('花钱') class LaoWang:
def fanqiang(self):
print('翻墙') class Son(LaoWang,MaMa,PaPa,LaoYe,LaoLao,GrandMa,GrandPa):
def kengdie(self):
print('我老子是刘备') #实例化对象
ls = Son()
ls.kengdie()
ls.fanqiang()
ls.huaqian()
ls.doudizhu()
ls.dance()
ls.damajiang()
ls.zhajinhua()
ls.zhuanqian() #菱形继承
'''
动物类 人类 鸟类 鸟人类
''' #动物类
class Animal: #属性
pass #方法
def say(self):
print('Animal张开嘴')
print('Animal合上嘴') #人类
class Human(Animal):
#属性
pass #方法
def say(self):
print('人类张开嘴')
#调用动物类的say方法
super().say()
print('人类合上嘴') #鸟类
class Bird(Animal):
#属性
pass #方法
def say(self):
print('鸟类张开嘴')
#调用动物类的say方法
super().say()
print('鸟类合上嘴') #鸟人类
class Birdy(Human,Bird):
#属性
pass #方法
def say(self):
print('鸟人类张开嘴')
#鸟类的say
Bird.say(self)
#人类say
Human.say(self)
print('鸟人类合上嘴') #实例化鸟人对象
by = Birdy()
by.say() #查看继承关系的mro列表
result = Birdy.mro()
print(result) #mixin设计模式 #水果类
class Fruit:
pass #南方水果类
class SouthFruit(Fruit):
pass #北方水果类
class NorthFruit(Fruit):
pass #北方礼物水果
class NorthGiftFruit(NorthFruit):
pass
#北方非礼物水果
class NorthNotGiftFruit(NorthFruit):
pass #南方礼物水果
class SouthGiftFruit(SouthFruit):
pass
#南方非礼物水果
class SouthNotGiftFruit(SouthFruit):
pass #苹果
class Apple(NorthGiftFruit):
pass #梨
class Pear(NorthNotGiftFruit):
pass #桔子
class Orange(SouthGiftFruit):
pass #香蕉
class Banana(SouthNotGiftFruit):
pass #多继承
#mixin设计模式 #水果类
class Fruit:
pass #南方类
class South:
pass #北方类
class North:
pass #礼物类
class Gift:
pass #非礼物类
class NotGift:
pass #苹果类
class Apple(Fruit,North,Gift):
pass #梨
class Pear(Fruit,North,NotGift):
pass #桔子
class Orange(Fruit,South,Gift):
pass #香蕉
class Banana(Fruit,South,NotGift):
pass
Python 类和对象-上的更多相关文章
- python 类和对象上
面向对象 Object Oriented 面向对象的学习: 面向对象的语法(简单,记忆就可以搞定) 面向对象的思想(稍难,需要一定的理解) 面向过程和面向对象的区别 面向过程开发,以函数作为基本结构使 ...
- [python]-类与对象-上
[类]是一个函数包.类中可以放置函数和变量,然后类中的函数可以很方便的使用类中的变量 1.类的定义 2.类中方法的调用 在类中被定义的函数被称为类的[方法],描述的是这个类能做什么.我们使用类名.函数 ...
- 一文讲全了Python 类和对象内容
摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan . Pytho ...
- python类与对象各个算数运算魔法方法总结
1.python类与对象各个算术运算魔法方法总结: 2.各个魔法方法应用举例: 3.实例训练: (1)我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常 ...
- Effective JavaScript Item 51 在类数组对象上重用数组方法
Array.prototype对象上的标准方法被设计为也能够在其他对象上重用 - 即使不是继承自Array的对象. 因此,在JavaScript中存折一些类数组对象(Array-like Object ...
- python 类和对象的属性
python类和对象的属性分为类属性和对象属性两大类,类属性属于类,而对象属性属于对象. 1. 父类的对象属性会被子类的对象继承. 2. 父类的类属性会被子类继承,还是作为类属性,如果父类改变了类属性 ...
- python类、对象
python类.对象 学习完本篇,你将会深入掌握 什么是类,对象 了解类和对象之间的关系 能独立创建一个People(人类),属性有姓名.性别.年龄.提供一个有参的构造方法,编写一个show方法,输出 ...
- python类与对象基本语法
面向对象编程的2个非常重要的概念:类和对象. 对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念--类. 类就相当于制造飞机时的图纸,用它 ...
- python 类和对象
类和对象 类 1.类的组成 数据和函数,二者是类的属性 2.两个作用: 实例化 属性引用 属性引用:类名.属性(增删改查) 实例化: 类名加括号就是实例化,会自动出发__init__的运行 ...
随机推荐
- Sencha Visual Studio(IDE插件)
Sencha Visual Studio(IDE插件) 首先从官网上下载Visual Studio插件,注意不是VSCode编辑器,下载完后安装打开Visual Studio提示你去注册,输入你的se ...
- android 按钮动态点击
关键代码: 1.创建一个btn_selector.xml的文件 <?xml version="1.0" encoding="utf-8"?>< ...
- pyc是个什么鬼?
1.Python是一门解释型语音? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释型语音,我就这样一直相信下去,知道发现了*.pyc文件的存在.如果是解释型语音,那 ...
- Ubuntu装完后要做的几件事
Ubuntu装完后要做的几件事 改hosts 无论哪里,改hosts都是第一件事,没hosts咋google.没google咋活.在终端输入命令 sudo gedit /etc/hosts在# The ...
- C语言程序设计·谭浩强(第四版)第二章课后习题的答案,算法——程序的灵魂
C语言程序小练习 1.用C语言设计程序算出1-1/2+1/3-14+1/5...+1/99-1/100的值 #include<stdio.h> int main() { ; double ...
- 二维数组快速排序(sort+qsort)
二维数组快速排序 qsort是c中快速排序,如果简单的一维数组排序,想必大家的懂.现在看一下二维数组的排序,虽然可以冒泡但是太费时间了,我们这里使用qsort来快速排序,看代码应该看得懂吧. 代码: ...
- POJ1679(次小生成树)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 36692 Accepted: 13368 ...
- poj3308 Paratroopers
Description It is year 2500 A.D. and there is a terrible war between the forces of the Earth and the ...
- Git的升级版本
关于升级版本,例如我们要升级service版本,我们可以这样子操作 1.在master里面pull完了之后,到自己的分支,然后merge master里面的代码,然后把pom文件 里面的版本升一级,然 ...
- Python3全栈学习目录
http://www.cnblogs.com/wupeiqi/articles/4938499.html 文辉整理: http://blog.51cto.com/9272317/1869914