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”语句来定义“类”,但是要想更加细粒度的控制“类”的创建,要使用元类编程才能实现. 比如说我们要实现这样的一个约束.所有项目中用到的类都应该要为它定义的方法提供文 ...
 
随机推荐
- CCNP路由实验之七 动态路由之BGP
			
 CCNP路由实验之七 动态路由之BGP 动态路由协议能够自己主动的发现远程网络,仅仅要网络拓扑结构发生了变化,路由器就会相互交换路由信息,不仅能够自己主动获知新添加的网络,还能够在当前网络连接失 ...
 - Eucalyptus企业云计算(建立能够和Amazon EC2兼容的云)
			
Eucalyptus是与一个在加利福尼亚大学的研究性项目,创建了一个使企业能够使用它们内部IT资源(包括服务器.存储系统.网络设备)的开源界面,来建立能够和Amazon EC2兼容的云. “Eucal ...
 - sql in(inner join)
			
查看执行任务可知,使用in关键字,会进行inner join,找出匹配项
 - ASP .NET Views文件夹下面的文件找不到
			
习惯将页面和它对应的js,css文件放在一个文件夹下,将这些都放在Views文件夹下 运行的时候发现找不到js和css文件 因为在MVC中,是不建议直接去访问Views文件夹的我们建立的ASP ...
 - ASP .NET Model
			
Model是全局变量,一个页面一个 前台 @ModelWebApplication1.Models.Movie; @{ ViewBag.Title = "ModelTest"; } ...
 - WPF 动态绑定listview的列内容
			
Binding binding = new Binding(); binding.Path = new PropertyPath("State"); listViewState.D ...
 - Win10《芒果TV》商店版更新v3.2.0:全新播放体验,跟着爸爸,想去哪就去哪
			
喜迎十一月黑五大促,跟着爸爸,想去哪就去哪,<芒果TV>UWP版迅速更新v3.2.0版,全新播放页华丽蜕变,新增互动评论.猜你喜欢.宽窄屏适配.多窗体模式切换. 芒果TV UWP V3.2 ...
 - ARTS 1.21 - 1.25
			
每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Share 一个传递价值观的东西! Algorithm: 学习算法 题目:3Sum Closest 解题过 ...
 - 编解码TIFF图像
			
解码: // Open a Stream and decode a TIFF image Stream imageStreamSource = new FileStream("tulipfa ...
 - 二叉树基本操作C代码
			
#include<stdio.h> #include<malloc.h> #define LEN sizeof(struct ChainTree) struct ChainTr ...