python关于类、self、_init_的应用
文章目录
- 关于```_init_```的应用
- 关于类属性和实例属性的应用
- 类的实践(制作一个填充用户假数据的工具)
关于_init_
的应用
class CocaCola:formula = ['caffeine','sugar','water','soda']def __init__(self):for element in self.formula:print('Coke has {}!'.format(element))def drink(self):print('Energy!')coke = CocaCola()'''
#执行结果为:
Coke has caffeine!
Coke has sugar!
Coke has water!
Coke has soda!
'''
注:
_init_
是初始化函数,意味着在执行类的时候,即便不去引用该函数,函数也会被自动执行
给CocaCola定义中文名词属性
#方法一
class CocaCola():formula = ['caffeine','sugar','water','soda']def __init__(self):self.local_logo = '可口可乐'def drink(self): # HERE!print('Energy!')coke = CocaCola()
print(coke.local_logo)'''
#执行结果为:
可口可乐
'''#方法二
class CocaCola:formula = ['caffeine','sugar','water','soda']def __init__(self,logo_name):self.local_logo = logo_namedef drink(self):print('Energy!')coke = CocaCola('可口可乐')
print(coke.local_logo)
关于类属性和实例属性的应用
类属性被重新赋值,引用类属性
class TestA:attr = 1obj_a = TestA()
TestA.attr = 42
print(obj_a.attr)'''
执行结果
42
'''
实例属性重新赋值,引用类属性
class TestA:attr = 1obj_a = TestA()
obj_b = TestA()
obj_a.attr = 42
print(obj_a.attr)
print(obj_b.attr)'''
执行结果
42
1
'''
类属性实例属性具有相同名称,引用属性
class TestA:attr = 1def __init__(self):self.attr = 42obj_c = TestA()
print(obj_c.attr)'''
执行结果
42
'''
注:
类属性被重新赋值,引用类属性:类属性变,实例属性变
实例属性重新赋值,引用类属性:类属性不变,实例属性变
类属性实例属性具有相同名称,引用属性:类属性不变,实例属性变
类的实践(制作一个填充用户假数据的工具)
设计思路
父类:FakeUser
功能:
1.随机姓名
a.单字名
b.双字名
c.无所谓是什么反正有个名字就好了
2.随机性别
子类:SnsUser
功能:
1.随机数量的跟随者
a. few
b. a lot加载随机姓名的词库
随机姓名:词库来源于某输入法的姓名词库解析后的结果,分为常见姓氏、常见名(常见名取排名前5000)
ln_path = 'E:/Test/last_name.txt'
fn_path = 'E:/Test/first_name.txt'
fn = []
ln1 = [] #单字名
ln2 = [] #双字名with open(fn_path,'r') as f:for line in f.readlines():fn.append(line.split('\n')[0])print(fn)with open(ln_path,'r') as f:for line in f.readlines():if len(line.split('\n')[0]) == 1:ln1.append(line.split('\n')[0])else:ln2.append(line.split('\n')[0])print(ln1)
print('='*70) #分割线
print(ln2)#将fn=[]、ln1=[]、ln2=[]修改成元组类型
- 定义父类
import random
class FakeUser:def fake_name(self,one_word=False,two_words=False):if one_word:full_name = random.choice(fn) + random.choice(ln1)elif two_words:full_name = random.choice(fn) + random.choice(ln2)else:full_name = random.choice(fn) + random.choice(ln1 + ln2)print(full_name)def fake_gender(self):gender = random.choice(['男','女','未知'])print(gender)
- 定义子类
class SnsUser(FakeUser):def get_followers(self,few=True,a_lot=False):if few:followers = random.randrange(1,50)elif a_lot:followers = random.randrange(200,10000)print(followers)user_a = FakeUser()
user_b = SnsUser()
user_a.fake_name()
user_b.get_followers(few=True)
- 改进父类、子类的定义方式
class FakeUser():def fake_name(self,amount=1,one_word=False,two_words=False):n = 0while n <= amount:if one_word:full_name = random.choice(fn) + random.choice(ln1)elif two_words:full_name = random.choice(fn) + random.choice(ln2)else:full_name = random.choice(fn) + random.choice(ln1 + ln2)yield full_namen+=1def fake_gender(self,amount=1):n = 0while n <= amount:gender = random.choice(['男','女','未知'])yield gendern +=1class SnsUser(FakeUser):def get_followers(self,amount=1,few=True,a_lot=False):n = 0while n <= amount :if few:followers = random.randrange(1,50)elif a_lot:followers = random.randrange(200,10000)yield followersn+=1user_a = FakeUser()
user_b = SnsUser()
for name in user_a.fake_names(30):print(name)
for gender in user_a.fake_gender(30):print(gender)
提示:本文是《编程小白的第一本python入门书》读后总结
python关于类、self、_init_的应用相关推荐
- 如何创建你的第一个Python元类?
Python元类设置类的行为和规则.元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一.通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类.本文介绍 ...
- Python:类与结构体
Python的类提供了面向对象编程的所有标准特性:类继承机制允许有多个基类,一个派生类可以覆盖基类中的任何方法,一个方法可以使用相同的名字调用基类中的方法. 1. Python的域(scopes)和名 ...
- Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法
Day09新手小白学python 第九节 Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法 目录 Day09新手小白学python 前言 一.面向对象介绍 二 ...
- 关于python创建类的深入理解
背景 我们知道在python中一切皆为对象的概念,那我们们来看一段程序 class Foo(object):def __init__(self, name):self.name = namef = F ...
- python定义类()中写object和不写的区别
python定义类()中写object和不写的区别 这里需要说明一下: python3中,类定义默认继承object,所以写不写没有区别 但在python2中,并不是这样 所以此内容是针对python ...
- python 元类工厂模式_Python进阶丨如何创建你的第一个Python元类?
摘要:通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类. Python元类设置类的行为和规则.元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一. ...
- Python进阶-----类的继承顺序
python的类可以继承多个类,如果继承多个类,那么其寻找方法的方式有:深度优先和广度优先 基类或者父类继承了object类,那么该类就是新式类,否则便是经典类 当类是经典类时,多继承情况下,会按照深 ...
- Python虚拟机类机制之descriptor(三)
从slot到descriptor 在Python虚拟机类机制之填充tp_dict(二)这一章的末尾,我们介绍了slot,slot包含了很多关于一个操作的信息,但是很可惜,在tp_dict中,与__ge ...
- Python -- dict 类
Python dict类常用方法: class dict(object): def clear(self): #清除字典中所有元素形成空字典,del是删除整个字典: >>> tes ...
- Python动态类和动态方法的创建和调用
借助于python的动态语言特性,很容易对对象进行添加方法或者属性,这也是python的灵活之一. 动态生成类的属性及其方法 在某些情况可能要根据不同的参数来动态生成不同的实例方法.静态方法.类方法. ...
最新文章
- Corosync Pacemaker 高可用 Mariadb
- curd boy 入门
- linux火狐打不开网页视频下载,win10下火狐浏览器无法打开网页视频的解决方法...
- 快速排序 数组 函数 c语言,书上快速排序程序中子函数是怎样更改数组的?理论上不可实现啊...
- 魅蓝android底层是什么,魅蓝E2的手机系统是什么
- android 获取系统时间的时间戳 ,时间戳日期互转,计算日期时间差,获取明天日期,比较时间大小
- spring5.0学习笔记1
- 数据库学习笔记3-隔离级别 Read Uncommitted
- uniapp引入阿里巴巴矢量图标库
- GooFlow获取节点/线信息和自定义节点属性
- 非线性鲁棒控制器_Sliding Mode_滑模控制
- Android Studio在运行时显示Please Select Android SDK的解决方法
- 全球及中国石墨烯行业发展前景规模及需求容量预测报告2021年版
- 基于STM32的DDS信号发生器
- 河北单招2021计算机类,2021河北省单招十大类专业
- kafka第二次课!!!
- video.js播放rtmp视频
- MCNP 学习笔记之空气比释动能(F4 F5 计数卡)
- 需求调研计划_三个公式,让你的2021年度培训计划更出彩
- vivado对mcs文件固化
热门文章
- Visual Studio工具箱显示自定义控件
- 教你如何解决SQL server中提示对象名无效
- Sql Server——Sql Server中进行查询操作时提示“对象名无效”
- java浪漫之心代码_浪漫桃心的Android表白程序
- 网络协议栈分析——从设备驱动到链路层
- HDOJ 4622 Reincarnation (hash)
- 我用二手书,在这里换了一大箱好书
- 计算机字长 按字编址,按字节编址与按字长编址区别及原理图解分析
- Python实用工具,pyqt5模块,Python实现自动生成艺术签名的小工具
- 计算机科学与技术专业前沿技术相关论文,计算机科学与技术专业创新能力的培养途径论文...