Python对象和类
Python 里的所有数据都是以对象形式存在的,对象是类的实例。
定义类(class)
使用class来定义一个类。
比如,定义一个cat类,如下:
class Cat():
def __init__(self):
self.name = name
创建两个cat类的实例cat1,cat2,如下:
cat1 = Cat('mimi')
cat2 = Cat('momo')
类中的__init__为初始化函数,在实例创建的时候执行。它的第一个参数必须是self.
继承
一个类可以继承另一个类,被继承的类可以称为'父类'或者'基类'。使用继承得到的新类会自动获得旧类中的所有方法,而不需要进行任何复制。在新类中,可以定义新的方法,也可以对继承的方法修改,修改后会覆盖原有的方法。
在python中,所有的类都继承了object类。
下面是一个简单的类继承的例子。
class Cat():
def __init__(self):
self.name = name
def play():
print("I like play") class BossCat(Cat):
def play(ball):
print("I like play %s", %ball)
BossCat的play方法覆盖了Cat类的play方法,所以,这两个类各自的对象执行play时会有不一样的表现。
使用super方法
子类中的__init__()方法(如果定义)会覆盖父类中__init__()。如果子类的__init__()方法要继承父类的__init__()方法的参数就可以使用super方法,如下:
>>> class Person():
def __init__(self,name):
self.name = name >>> class EmailPerson(Person):
def __init__(self,name,email):
super().__init__(name)
self.email = email
属性的访问和设置
python中所有特性都是公开的,如果想要在类中实现一些私有属性的话,可以:
1 getter 方法和setter 方法
比如:
>>> class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age def get_name(self):
return self.name def set_name(self,name):
self.name = name >>> perter= Person('peter',28)
>>> perter.name
'peter' >>> perter.name = 'perter'
>>> perter.name
'perter'
>>>
2 使用@property获取属性, @xxx.setter来设置属性值。
比如:
class Student(object): @property
def birth(self):
return self._birth @birth.setter
def birth(self, value):
self._birth = value @property
def age(self):
return 2014 - self._birth >>> S1 = Student()
>>> S1.birth = 1989
>>> S1.birth
1989
>>> S1.age
25
>>> S1.birth = 1990
>>> S1.birth
1990
>>> S1.age
24
>>> S1.age = 26
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
S1.age = 26
AttributeError: can't set attribute
3 使用'__'来定义内部私有/隐藏的属性。
如下:直接访问__定义的属性时会报错。
>>> class Person(object):
def __init__(self,input_name,age):
self.__name = input_name
self.__age = age @property
def name(self):
return self.__name
@name.setter
def name(self,input_name):
self.__name = input_name >>> Peter = Person('Peter',29)
>>> Peter.name
'Peter' >>> Peter.__name
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
Peter.__name
AttributeError: 'Person' object has no attribute '__name'
实例方法/类方法/静态方法
实例方法(instance method): 以self作为第一个参数的方法。当调用方法时,python会将调用该方法的对象作为self参数传入。
类方法(class method):使用@classmethod修饰的方法。注意,类方法的第一个参数是类本身cls。
>>> class TeamA():
num = 0
def __init__(self):
TeamA.num += 1 @classmethod
def counter(cls):
print("instance number is: %s" %cls.num) >>> a1=TeamA()
>>> TeamA.counter()
instance number is: 1
>>> a2 = TeamA()
>>> TeamA.counter()
instance number is: 2
>>>
静态方法(static method): 用@staticmethod 修饰。
Python对象和类的更多相关文章
- python 对象和类
python中所有数据都是以对象形式存在.对象既包含数据(变量),也包含代码(函数),是某一类具体事物的特殊实例. 面向对象的三大特性为封装.继承和多态. 1.定义类 #定义空类 class Pers ...
- Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理
上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...
- 对于python,一切事物都是对象,对象基于类创建
新建列表.新建string字符串 li1 = [1, 2, 3, 4] li2 = list([1, 2, 3]) s1 = "abc" s2 = str("abc&qu ...
- 从0开始的Python学习012数据结构&对象与类
简介 数据结构是处理数据的结构,或者说,他们是用来存储一组相关数据的. 在Python中三种内建的数据结构--列表.元组和字典.学会了使用它们会使编程变得的简单. 列表 list是处理一组有序的数据结 ...
- python的类和对象(类的静态字段)
转自:http://www.cnblogs.com/Eva-J/p/5044411.html 什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是 ...
- Python里的类和对象简介
---恢复内容开始--- Python里的类 对象=属性+方法: 对象的属性主要是指主要的特征和参量,而方法主要是指函数: 类是一个具有一定特征和方法的集合,而对象是类的一个:类和对象的关系就如同模 ...
- Python面试题之Python对象反射、类反射、模块反射
python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 一.getattr 对象获取 class Manager: role = &quo ...
- python入门17 类和对象
类:一类事物的抽象化.概念: 类的变量(属于类的变量,定义在类的开始处) 成员变量(self.变量) 类的方法( @classmethod,cls参数) 成员方法( self参数 ) 静态方法 ...
- Python之面向对象类和对象
Python之面向对象类和对象 定义一个类:class 定义类的语法: class Test(object): """ 类里定义一类事物共同的技能. 可以是变量,也可是函 ...
随机推荐
- luoguP3799 妖梦拼木棒 [组合数学]
题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有n根木棒,现在从中选4根,想要组成一个正三角形,问有几种选法? 输入输出格式 输入格式: 第一行一个整数n 第二行n个整数 ...
- NOIp2018集训test-9-8(pm) (联考一day2)
把T1题读错了,想了一个多小时发现不可做.然后打了t2,常数不优秀.然后去打t3,lct,结果打挂爆0了. 然后今天就爆炸了. 如果这是noip我今年就可以直接回去学常规了.学常规多好,多开心. 今天 ...
- [NOI.AC] candy
题意:求净利益. 思路: 其实我也不怎么懂题面. 不过这种题一般来说就是从最大的开始选. 所以考虑贪心. 那么代价如何处理呢?? 我们考虑两个序列同时选数,把代价每次记录到一个序列的和上,那么对于两次 ...
- Greenplum(PostgreSql)使用 with recursive 实现树形结构递归查询并插入新表
本代码目的是替代Oracle的connect by语句,并实现后者的path和idleaf功能. 正文开始: 假设表org,字段有 id(编号),name(名称),pid(上级编号), 最上级的记录p ...
- XDTIC2019招新笔试题 + 官方解答
腾讯创新俱乐部2019年招新笔试试题 [1] 小宗学长正在努力学习数论,他写下了一个奇怪的算式: \[ 2019^{2018^{2017^{\dots^{2^1}}}} \] 算式的结果一定很大, ...
- 什么是css块级元素和内联元素
CSS文档流与块级元素(block).内联元素(inline),文档流这个概念理解了它,一堆CSS布局的理论都 变得易于理解,并且体会到CSS这套设计的合理性所在. 文档流 将窗体自上而下分成一行行, ...
- 注解到处excel
package com.cxy.domain.poi; import java.lang.annotation.ElementType; import java.lang.annotation.Ret ...
- C#& Screen 类&(&多&屏&幕&开&发)
原文:C#& Screen 类&(&多&屏&幕&开&发) Screen 类 下面的代码示例演示如何使用 Screen 类的各种方法和属性. 该示 ...
- c++ socket 出现绑定失败的一个特殊原因。Bind failed Error:10049
这个问题,客户那边出现这种情况已经将近一年时间, 一直都得不到很好的解决,我提供出去的动态库可以确保没有问题,因为除了这家公司,其他有好几家公司都在用的,都是很正常的,但是这家公司很奇怪,不,应该说这 ...
- 常用的JS方法(见到好的就添加进来)
// 悬浮置顶 ; (function ($) { $.fn.crumbsFixedPosition = function (options) { var defaults = { cName: 'f ...