python3的类
python3的类:
python是一门面向对象的编程语言,学习python下的类,,能帮助自己形成一个基本的面向对象的概念。关于类和实例的理解,一个易懂的栗子就是动物类,我们把动物看做一个类,而狗啊,猫啊,鼠啊的就是这个类的实例。你也完全可以把自己定义的类看成是一个自定义的数据类型,想int、str、list一样,不一样的是这个自定义的数据类型中有一些我们自己编写的功能方法,每一个声明的实例都可以直接调用这里面的方法。
类的属性:
简单的说,类的属性就是在类中定义的变量。而所有的实例,都具有这么一个或多个属性。比如上面的动物类实例狗、猫、鼠。它们都有四只脚、一直尾巴。这就称为属性。属性的引用和和使用,用(.)
class Animal(object):
x = 4 #代表实例的脚
y = 1 #代表实例的尾巴 dog = Animal()
cat = Animal()
mouse = Animal() print("狗的脚数:%d" % dog.x)
print("猫的脚数:%d" % cat.x)
print("鼠的尾巴数:%d" % mouse.y)
运行结果如下:
类的方法:
__init__方法:
类中离不开实现各种功能的方法,而在定义类后,大部分都会先重写一下__init__方法,它规定了在创建实例时必须传入的一些参数。
class Test1(object): #类的定义 def __init__(self, name, salary): #规定在声明实例时必须传入name、salary这两个参数
self.name = name
self.salary = salary def print_f(self): #类的print_f方法
print("姓名:%s" % self.name)
print("分数:%d" % self.salary) test1 = Test1("shangsan", 59) #声明一个类的实例,同时传入两个必须的参数,如果参数不够的话,会报错。
test1.print_f() #调用这个实例中的print_f方法
其实你也可以不重写__init__方法,直接把参数放在需要使用的方法中,只是在调用时稍微有点不一样,不需要在参数名前加“self.”,改一下上面的代码:
class Test2(object): #继承object类,后面会说道
def print_f(self, name, salary): #去掉__init__方法,直接把参数放在方法中
print("姓名:%s" % name)
print("分数:%d" % salary) #在格式化时,若前面用%d,则必须传入整形 test2 = Test2() #声明实例时不再传入参数,而是在下面调用这个方法时传入所需要的参数。
test2.print_f("lisi", 59) #调用print_f方法
自定义方法:
在类中自定义方法和在外面是一样的,只不过在后面的参数中会多一个self,但这个参数我们是不需要传入的,所在我们完全可以就像在类外那样进行编写。至于这个self,它代表的是类的实例。方法的调用,可以用(.)来进行调用
上面两端代码中的print_f方法就是我们自定义的方法,他的功能是输出name和salary,我们调用时,只需要在实例后面加个(.)然后选择这个方法就可以了
类的继承:
访问父类的属性和方法
类的继承,就是我们在创建一个类时,它可以继承另一个类的属性和方法。新创建的这个类交子类、做继承的类交父类。比如我们先创建了一个animal类,有创建了一个dog类并继承animal类,那animal就是父类,dog就是子类
如果我们想要继承某个类,只需要在创建子类时,在后面的()中填入父类的类名就可以了,如果不需要成其他类,则填入object就行,这是所有类的父类,看下下面的代码
class People(object): #创建父类,继承object类 def __init__(self, name, age): #必须传入name和age
self.name = name
self.age = age def prient_f(self):
print("i am {0},i am {1} years old!!".format(self.name, self.age)) class Student(People): #创建子类,继承People这个父类
pass a = Student("zhangsan", 12) #因为是继承,所以也要传入参数 print("我是子类,我要访问父类的name属性 %s" % a.name)
print("我是子类,下面是我访问的父类的print_f方法")
a.prient_f()
运行结果如下:
在子类中重写方法
简单改一下上面的代码,如下:
class People(object): def __init__(self, name, age):
self.name = name
self.age = age def print_f(self):
print("i am {0},i am {1} years old!!".format(self.name, self.age)) class Student(People):
def print_f(self): #重写print_f方法
print("我是print_f方法,我已经在子类中被重写!") a = Student("zhangsan", 12)
a.print_f()
这时,运行结果就变成了这样
方法的重写,简单的说就是在子类中命名一个与父类完全相同的方法。
类的私有属性
现在我们知道,声明一个实例后,这个实例就可以访问类中的属性,当我们想要一个属性只在类的内部被使用而不能让类外部的实例访问是,这是可以定义私有变量。
只需要在变量名前加两个下划线就行了(__),看下面的代码:
class worker(object): #创建类
name = "wangwu" #公开变量
__age = 12 #私有变量
a = worker() #声明实例
print(a.name) #访问共有变量
print(a.__age) #访问私有变量,会报错
可以看到,当我们尝试访问私有变量时,会出现错误,
对于私有变量,我们可以在类型定义一个方法对它进行返回,当我们想要访问这个属性时,可以通过这个方法。如下。
class worker(object): name = "wangwu"
__age = 12
def get__age(self):
return self.__age a = worker()
print(a.name)
print(a.get__age())
把变量放在方法中的好处是,可以对变量的值进行检查,判断是否符合规则
python3的类的更多相关文章
- paip.python3 的类使用跟python2 的不同之处
paip.python3 的类使用跟python2 的不同之处 #------python3的写法而且使用.. #class syllable(BaseClassA, BaseClassB): cla ...
- python3 统计类的实例个数
python3 统计类的实例个数 有时候我们可能想统计下类所创建的实例个数,代码如下: class Dog: # 定义一个狗类 count = 0 # 用于统计类所创建的实例个数 def __init ...
- python3.x 类和对象
python同样支持类和对象.在python3.x中没有了经典类,只有新式类,默认创建的就是新式类.具体的新式类与经典类的不同在python3.x中已经没有意义了. 类的定义和实例化 python定义 ...
- PYTHON3中 类的继承
继承 1:什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,也就是说在python中支持一个儿子继承多个爹. 新建的类成为子类或者派生类. 父类又可以成为基类或者 ...
- Python3 面向对象-类的继承与派生
1.什么是继承? 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类可称为基类或超类,新建的类称为派生类和或子类. 子类会遗传父类的属性,从而解决代码重用问题. ...
- Python3的类注意事项
参考: https://www.runoob.com/python/python-object.html https://www.runoob.com/w3cnote/python-extends-i ...
- python3 Counter类(计数器)
Counter(计数器):用于追踪值的出现次数 Counter类继承dict类,所以它能使用dict类里面的方法 创建一个Counter类 import collections obj = colle ...
- python3 urllib 类
urllib模块中的方法 1.urllib.urlopen(url[,data[,proxies]]) 打开一个url的方法,返回一个文件对象,然后可以进行类似文件对象的操作.本例试着打开google ...
- python3 元类编程的一个例子
[引子] 虽然我们可以通过“class”语句来定义“类”,但是要想更加细粒度的控制“类”的创建,要使用元类编程才能实现. 比如说我们要实现这样的一个约束.所有项目中用到的类都应该要为它定义的方法提供文 ...
随机推荐
- Laravel 5.2 中多用户认证实现(前台和后台登录)
Laravel 5.2中多用户认证支持,即同时允许不同数据表用户(如前台用户.后台用户.app用户等)登录认证.下面我们就来简单介绍多用户登录及注册功能实现. 1.生成认证脚手架 首先我们使用Lara ...
- Matlab随笔之线性规划
原文:Matlab随笔之线性规划 LP(Linear programming,线性规划)是一种优化方法,在优化问题中目标函数和约束函数均为向量变量的线性函数,LP问题可描述为:min xs.t. ...
- bigdata_mac下安装spark_scala
Java 下载安装Mac对应版本的JDK. Apache-spark $ brew update $ brew info apache-spark $ brew install apache-spar ...
- zlog 程序日志的库 交叉编译(Linux生成ARM库,观察执行步骤)
1. zlog 是个很好的写程序日志的库,功能比较强大,上手快. 2. 下载地址:https://github.com/bmanojlovic/zlog 3. cd 到文件夹下,对 autogen.s ...
- Installation and Configuration Guide
Harbor can be installed by one of three approaches: Online installer: The installer downloads Harbor ...
- WebAPI Delete方法报错405 Method Not Allowed
.net framework 在Web.config文件中添加如下配置: <system.webServer> <modules runAllManagedModulesForAll ...
- Logback 专题
logback-spring.xml <?xml version="1.0" encoding="UTF-8"?> <configuratio ...
- Keil5生成bin文件
进入“Options for Target”设置界面如下: 如图所示方框中输入: fromelf.exe --bin -o "$L@L.bin" "#L" 生成 ...
- linux安装脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- Win10《芒果TV》商店版2016-2017春节大礼,每日前100名用户免费领取7天VIP
告别2016,喜迎2017,鸡年大吉,春节期间,每天登录Win10<芒果TV>商店版的前100位用户可领取一张芒果TV会员7天体验卡,先到先得. 芒果TV会员权益: 1.全站免广告 2.自 ...