#类和对象 
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 类和对象-上的更多相关文章

  1. python 类和对象上

    面向对象 Object Oriented 面向对象的学习: 面向对象的语法(简单,记忆就可以搞定) 面向对象的思想(稍难,需要一定的理解) 面向过程和面向对象的区别 面向过程开发,以函数作为基本结构使 ...

  2. [python]-类与对象-上

    [类]是一个函数包.类中可以放置函数和变量,然后类中的函数可以很方便的使用类中的变量 1.类的定义 2.类中方法的调用 在类中被定义的函数被称为类的[方法],描述的是这个类能做什么.我们使用类名.函数 ...

  3. 一文讲全了Python 类和对象内容

    摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan  . Pytho ...

  4. python类与对象各个算数运算魔法方法总结

    1.python类与对象各个算术运算魔法方法总结: 2.各个魔法方法应用举例: 3.实例训练: (1)我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常 ...

  5. Effective JavaScript Item 51 在类数组对象上重用数组方法

    Array.prototype对象上的标准方法被设计为也能够在其他对象上重用 - 即使不是继承自Array的对象. 因此,在JavaScript中存折一些类数组对象(Array-like Object ...

  6. python 类和对象的属性

    python类和对象的属性分为类属性和对象属性两大类,类属性属于类,而对象属性属于对象. 1. 父类的对象属性会被子类的对象继承. 2. 父类的类属性会被子类继承,还是作为类属性,如果父类改变了类属性 ...

  7. python类、对象

    python类.对象 学习完本篇,你将会深入掌握 什么是类,对象 了解类和对象之间的关系 能独立创建一个People(人类),属性有姓名.性别.年龄.提供一个有参的构造方法,编写一个show方法,输出 ...

  8. python类与对象基本语法

    面向对象编程的2个非常重要的概念:类和对象. 对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念--类. 类就相当于制造飞机时的图纸,用它 ...

  9. python 类和对象

    类和对象 类 1.类的组成    数据和函数,二者是类的属性 2.两个作用: 实例化 属性引用  属性引用:类名.属性(增删改查)   实例化: 类名加括号就是实例化,会自动出发__init__的运行 ...

随机推荐

  1. HTTP状态保持的原理

    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied) ...

  2. maven 打包失败 提示找不到jar的问题

    服务打包的时候发现打包失败,查看原因大概是找不到jar包,但是本地仓库有.最终的解决的办法是使用maven 命令重新把jar包安装到本地仓库. 命令如下:mvn install:install-fil ...

  3. visio studio code 用chrom启动打开本地html

    { // 使用 IntelliSense 了解相关属性. // 悬停以查看现有属性的描述. // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linki ...

  4. ElasticSearch : 基础

    #新建索引以及类型: PUT http://10.18.43.3:9200/test { "settings": { "number_of_shards": 3 ...

  5. phpstudy apache启动失败,80端口占用问题解决方案

    安装phpstydy,启动apache时,启动失败,提示80端口占用,需要将占用80端口的服务进程关闭 1.运行cmd, netstat -ano 找到80端口对应的pid  4 2.一般都是调用 h ...

  6. memcached搭建

    MemCache 安装使用 安装memcached之前首先需要安装libevent, 如果没有安装的请自行去安装. 下载memcache http://www.memcached.org/files/ ...

  7. Python实现多属性排序

    Python实现多属性排序 多属性排序:假如某对象有n个属性,那么先按某规则对属性a进行排序,在属性a相等的情况下再按某规则对属性b进行排序,以此类推. 现有对象Student: class Stud ...

  8. STL 一些常用的STL函数(持续更新

    先说一下  一边要用到算法的东西一般要加#include<algorithm>头文件 一.栈和队列 1 栈 :一种线性表 特点  后进先出 头文件  #include<stack&g ...

  9. javascript 之 为函数设置默认参数值

    方法一: function example(a,b){ var a = arguments[0] ? arguments[0] : 1;//设置参数a默认为1 var b = arguments[1] ...

  10. CentOS修改网卡名称

    转 一.问题说明 测试环境中出现的小问题,因为虚拟机之间经常复制来复制去,导致网卡配置这块的不一致现象. 配置文件的信息: [root@ora10g network-scripts]# catifcf ...