python基础-面向对像、类名\实例调用、__init__函数、类名\实例增删改查属性
来源:互联网 发布:怎样下载办公室软件 编辑:程序博客网 时间:2024/06/16 15:38
- 利用函数来引入面向对象
- 面向对象类名调用
- 类调用的一些迷惑用法
- 面向对象实例调用
- 面向对象_init_
- 对象属性的增删改查2种方式
- 练习demo
利用函数来引入面向对象
在了解python面向对象概念,我们先用函数来实现
# #方法方式定义类def Dog(): def bite(person): person["total"]-=5 dog = { "name":"alpha", "total":100, "bite":bite } return dogdef Person(): def stack(dog): dog["total"]-=5 person = { "name":"safly", "total":100, "stack":stack } return persondog = Dog()person = Person()person["stack"](dog)print(dog)print(person)
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/safly.py{'name': 'alpha', 'total': 95, 'bite': <function Dog.<locals>.bite at 0x007F1810>}{'name': 'safly', 'total': 100, 'stack': <function Person.<locals>.stack at 0x007F17C8>}Process finished with exit code 0
面向对象(类名调用)
#类定义class Person: def walk(self): print("self",self) print("walk") country = "中国" mWalk = walk#获取属性2种方法print(Person.country)print(Person.__dict__["country"])#调用方法print(Person.walk)#如下错误missing 1 required positional argument: 'self'# print(Person.walk())Person.walk(1)Person.mWalk("mmmmm")#通过如下的方式修改Person.country = "美国"print(Person.country)#不能修改__dict__# Person.__dict__["country"] = "美国"# print(Person.__dict__["country"])#直接添加属性Person.role = "人"print(Person.role)# 删除属性del Person.role# print(Person.role)
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/safly.py中国中国<function Person.walk at 0x036817C8>self 1walkself mmmmmwalk美国人Process finished with exit code 0
1、类名.静态属性
2、类名.方法(self) 必须传参数!!!
否则TypeError: walk() missing 1 required positional argument: ‘self’
类调用的一些迷惑用法
def method(): print("out method")class Animal(): name = "animal" method = method def method1(self, a): print("method1",a) def method2(a): print("method2", a)a = Animal()print(a.method1(1))print("--------")#如下方式不行# a.method()#如下方式也不行# a.method2(2)#如下可以调用类外函数Animal.method()print("--------")Animal.method2(111)print("--------")Animal.method1(Animal,333)print("--------")Animal.method1(a,333)
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/python.pymethod1 1None--------out method--------method2 111--------method1 333--------method1 333Process finished with exit code 0
面向对象(实例调用)
# #类定义class Person: #动态属性、函数属性、方法 def walk(self): print(self) print("walk") # 静态属性(数据属性) country = "中国" mWalk = walkp = Person()print(p.country)p.walk()p.mWalk()p.role = "driver"print(p.role)# 如下2种报错!!!!!!!!!!# p.mWalk(33)# p.walk("呵呵")
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/safly.py中国<__main__.Person object at 0x00B32270>walk<__main__.Person object at 0x00B32270>walkdriverProcess finished with exit code 0
实例.方法(self) 不需要传递参数
面向对象(_init_)
class Person: #动态属性、函数属性、方法 def walk(self): print(self) print("walk") # 静态属性(数据属性) country = "中国" mWalk = walk #添加属性返回初始化对象 def __init__(self): #内存地址 print(id(self)) print("init") #把上面的无参__init__覆盖了,使用如下的初始函数 def __init__(self,name): #内存地址 self.name = name print(id(self)) print("self",self) print("init",name)#init会被覆盖,看执行顺序!!!!!p = Person("saly")# 以下报错# p = Person()# 内存地址print(id(p))print(p.__dict__)
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/safly.py11740496self <__main__.Person object at 0x00B32550>init saly11740496{'name': 'saly'}Process finished with exit code 0
再来看_init_的代码
class Person: def __init__(self,name): self.name = name print(id(self),self) def walk(self): print(id(self), self) print("walk",self.name)p = Person("safly")Person.__init__(p,"rrr")print(p.__dict__)print("------------")#走__init__函数p = Person("safly")p.walk()print("------------")p = Person("safly")Person.walk(p)#报错么有该属性# Person.walk(11)
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/safly.py46015088 <__main__.Person object at 0x02BE2270>46015088 <__main__.Person object at 0x02BE2270>{'name': 'rrr'}------------46015856 <__main__.Person object at 0x02BE2570>46015856 <__main__.Person object at 0x02BE2570>walk safly------------46015952 <__main__.Person object at 0x02BE25D0>46015952 <__main__.Person object at 0x02BE25D0>walk saflyProcess finished with exit code 0
如下也是构造对象的另外方式
#构造对象class Person: def __init__(self, name): print(self,name) self.name = name return selfp = Person.__init__(Person,"ddd")print(p.name)
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/safly.py<class '__main__.Person'> ddddddProcess finished with exit code 0
对象属性的增删改查2种方式
通过实例.dict进行增删改查
或者实例.属性方法实现
class Person: #动态属性、函数属性、方法 def walk(self): print("walk") # 静态属性(数据属性) country = "中国" def __init__(self,name): #内存地址 self.name = namep = Person("saly")#修改print(p.__dict__["name"])p.__dict__["name"] = "aaa"print(p.__dict__)#添加p.__dict__["sex"] = "nv"print(p.__dict__)#删除p.__dict__.pop("sex")print(p.__dict__)#添加新方式p.sex = "nv"print(p.sex)print(p.__dict__)p.sex = "nan"print(p.sex)print(p.__dict__)#删除del p.sexprint(p.__dict__)
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/safly.pysaly{'name': 'aaa'}{'name': 'aaa', 'sex': 'nv'}{'name': 'aaa'}nv{'name': 'aaa', 'sex': 'nv'}nan{'name': 'aaa', 'sex': 'nan'}{'name': 'aaa'}Process finished with exit code 0
练习demo
#人类 :# 属性 :life_value,aggr,name,job# 方法: attackclass Person: def __init__(self,life_value,aggr,name,job): self.life = life_value self.aggressive = aggr self.name = name self.job = job def attack(self,dog_obj): #boss_gold,tiedan print('%s 攻击了 %s'%(self.name,dog_obj.name)) dog_obj.life = dog_obj.life - self.aggressive#狗类:# 属性:life_value,aggr,name,kind# 方法:biteclass Dog: def __init__(self,life_value,aggr,name,kind): self.life = life_value self.aggressive = aggr self.name = name self.kind = kind def bite(self,person_obj): print('%s 咬了 %s' % (self.name, person_obj.name)) person_obj.life -= self.aggressivetiedan = Dog(1000,100,'铁蛋','土狗')boss_gold = Person(100,2.5,'太黑','old_driver')boss_gold.attack(tiedan) #Person.attack(boss_gold,tiedan)print(tiedan.life)
输出如下:
E:\python\python_sdk\python.exe "E:/python/py_pro/5. 面向对象交互.py"太黑 攻击了 铁蛋997.5Process finished with exit code 0
阅读全文
0 0
- python基础-面向对像、类名\实例调用、__init__函数、类名\实例增删改查属性
- Python 面向对象编程基础(定义类并创建实例、创建实例属性、初始化实例属性、访问限制、类属性、属性名冲突、实例方法、类方法)
- 【Python基础】Python面向对象 - 9 - 类属性,实例属性
- 【实例】动态调用方法,通过类名
- MyBatis实现单表增删改查(CURD)--属性名与字段名不一致问题
- JDBC增删改查实例
- 【hibernate实例】增删改查
- 增删改查单元测试实例
- DaoImpl增删改查实例
- laravel增删查改实例
- Mybatis增删改查实例
- PreparedStatement增删查改实例
- Mybatis增删改查实例
- Mybatis增删改查实例
- python 根据类名实例化对象
- Dom4j对xml增删改查的实例详解
- 对hbase进行增删改查的操作实例
- 百度鹰眼Java接口调用增删改查实例
- influxdb介绍,安装,使用等(转载:http://www.jianshu.com/p/d2935e99006e)
- maven项目pom文件(4)-完整的示例
- java 反射,访问成员变量
- 基于轮廓线索(Contour Cues)的实时行人检测
- WPF 中控件随窗体拉伸问题
- python基础-面向对像、类名\实例调用、__init__函数、类名\实例增删改查属性
- zip和tgz以及exe的区别
- java利用keytool将.cer转.keystore
- 解决mysql不是内部或外部命令
- shell脚本没有IDE查看查看函间调用关系怎么办?
- CJSON源码研究笔记
- CentOS下安装JDK的三种方法
- 单例模式
- 数据结构-堆栈和队列