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”语句来定义“类”,但是要想更加细粒度的控制“类”的创建,要使用元类编程才能实现. 比如说我们要实现这样的一个约束.所有项目中用到的类都应该要为它定义的方法提供文 ...
随机推荐
- boost::bind应用示例
// testBind.cpp : Defines the entry point for the console application. // #include "stdafx.h&qu ...
- latex 矩阵分块(block matrix)
Lesson 12: Making Block Matrices in LATEX 按列分块: [AAb⋯An−1b] $$ \left[ \begin{array}{c|c|c|c} A & ...
- 【Java】【Flume】Flume-NG阅读源代码AvroSink
org.apache.flume.sink.AvroSink是用来通过网络来数据传输的.能够将event发送到RPCserver(比方AvroSource),使用AvroSink和AvroSource ...
- web开发中../、./、/的区别
原文:web开发中../.././的区别 最近在业余时间慢慢玩起了网站开发,觉得挺有意思的.在开发过程中,老是分不清 ../.././三者之间的区别,也老是弄混,最后仔细搜索研究了一下,现在终于懂了. ...
- XE Delphi 判断字符为中文的方法
在uses中添加System.AnsiStrings /// Param ch--字符串/// Param cno--字符位置 function IsZHChar(const ch: AnsiStri ...
- Ionic2开发环境搭建-VS 2017
原文:Ionic2开发环境搭建-VS 2017 目前在VS 2017中创建Ionic2版本项目 注:在VS中开发Ionic项目,使用的Ionic(v2.x),Cordova(v6.3.1),Angul ...
- Win8 Metro(C#)数字图像处理--2.49Zhang二值图像细化算法
原文:Win8 Metro(C#)数字图像处理--2.49Zhang二值图像细化算法 [函数名称] 二值图像细化算法 WriteableBitmap ThinningProcess ...
- Windows 10开发基础——VS2015 Update1新建UWP项目,XAML设计器无法加载的解决
这次,我们来解决一个问题...在使用Visual Studio 2015 Update 1的时候,新建一个UWP的项目,XAML设计器就会崩,具体异常信息如下图: 解决方法如下:下面圈出的那个路径就按 ...
- 微信小程序把玩(八)view组件
原文:微信小程序把玩(八)view组件 刚看到这个效果的时候还真是和ReactNative的效果一致,属性也基本的一样. view这个组件就是一个视图组件使用起来非常简单. 主要属性: flex-di ...
- 零元学Expression Blend 4 - Chapter 36 来玩捉迷藏吧!!!看看ScrollBar的Disabled与Hidden之差异
原文:零元学Expression Blend 4 - Chapter 36 来玩捉迷藏吧!!!看看ScrollBar的Disabled与Hidden之差异 本次要针对Disabled以及Hidden作 ...