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”语句来定义“类”,但是要想更加细粒度的控制“类”的创建,要使用元类编程才能实现. 比如说我们要实现这样的一个约束.所有项目中用到的类都应该要为它定义的方法提供文 ...
随机推荐
- 嵌入式开发(*(volatile unsigned long *)) 认识
一个.说明 (*(volatile unsigned long *)) 这个语句对于不同的计算机体系结构,设备可能是port映射,也可能是内存映射的. 假设系统结构支持独立的IO地址空间.而且是por ...
- EBS OAF 发展 URL商标、加密和编码
EBS OAF 发展 URL商标.加密和编码 (版权声明.我原来的或翻译的文章,如需转载,转载的个人学习,转载请注明出处:否则,请与我联系.版权所有) 马克 当您指定页面定义声明URL参数,文本也能够 ...
- 对std::string和std::wstring区别的解释,807个赞同,有例子
807down vote string? wstring? std::string is a basic_string templated on a char, and std::wstring on ...
- WPF太阳、地球、月球运动轨迹模拟
原文:WPF太阳.地球.月球运动轨迹模拟 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangyisen0713/article/details/ ...
- Python缺乏调查的陷阱 动态实例属性、引用、逃生
--看到哪里.想到哪里,记到哪里 非常多时候.非常多人学python的时候,会忽略的东西非常多.大多数都盯着能"出货"即可,可是通常在读别人的代码的时候发现,看不懂...一方面是自 ...
- [转]完美解决)Tomcat启动提示At least one JAR was scanned for TLDs yet contained no TLDs
一.文章前言 本文是亲测有效解决At least one JAR was scanned for TLDs yet contained no TLDs问题,绝对不是为了积分随便粘贴复制然后压根都 ...
- SwiftCafe 咖啡时光 - 了解 Swift 中的闭包
闭包(Closure) 是现代开发语言的必备特性,极大的提高了我们的开发效率. 关于闭包,你可以把它理解为一种特殊的变量或对象.简而言之,我们通常的对象,里面存储的是变量或对象的值,而闭包里面存储的是 ...
- “Rsync” could not be found on your PATH
Vagrant with VirtualBox on Windows10: “Rsync” could not be found on your PATH 使用agrant安装系统时,遇到的错误提示: ...
- 【msdn wpf forum翻译】TextBox中文本 中对齐 的方法
原文:[msdn wpf forum翻译]TextBox中文本 中对齐 的方法 原文链接:http://social.msdn.microsoft.com/Forums/en-US/wpf/threa ...
- WPF 遍历 控件
比较简单的方式是 在设计一个画面时 先添加一个grid 或其他的布局控件 确保要遍历的控件都在这个Grid中时就可以这么写 foreach (UIElement uie in Grid.Childre ...