Python面向对象学习
以下面例子作为面向对象基础介绍,类比java里的面向对象既可以,大同小异
class Employee():
    raiseAmount=1.04
    employeeNum=
    def __init__(self,first,surname,salary):#相当于java里面的结构体,self可以理解为this
        self.first = first  #属性
        self.surname = surname
        self.salary = salary
        self.email = first + '.' + surname + '@163.com'
        Employee.employeeNum+=
    def infosummary(self):#方法
        return '{}, {}, {}'.format(self.first + " " + self.surname, self.salary,
                                   self.email)
    def raiseSalary(self):
        self.salary = self.salary * self.raiseAmount
employee1 = Employee('Harray','Potter',)#声明一个实例
employee2 = Employee('peter','lee',)
print(employee2.infosummary())
print(employee1.infosummary())
employee2.raiseAmount=1.09#修改全局变量
employee2.raiseSalary()
print(employee2.infosummary())
子类dog,cat继承动物animal,子类继承父类所有属性,并可以重写父类方法,并可以有自己的方法。
#继承
class Animal():
name=""
def __init__(self, age, weight , height):
self.age = age
self.weight = weight
self.height = height
def eat(self):
print(self.name+' '+"is eating") class Cat(Animal):
pass
class Dog(Animal):
def __init__(self,age,weight, height,name):
Animal.__init__(self,age,weight,height)
Animal.name=name
Animal.eat(self)
def bark(self):
print('the dog is barking') animal=Animal(,,)
animal.name='cat'
animal.eat()
cat = Cat(,,)
cat.eat()#name没有初始化,所以结果的name为空
dog = Dog(,,,'dog')
dog.bark()
实例方法:在类中,定义的方法,这个方法的第一个参数默认是实例对象,一般习惯使用self
类方法:在类中,定义的方法,这个方法的第一个参数默认是类对象,一般习惯用cls表示,用 @ classmethod装饰器装饰
静态方法:在类中定义的方法,这个方法的参数没有要求,用 @ staticmethod装饰器装饰
实例方法只能被实例(对象)调用
类方法和静态方法可以被类或者实例调用
class Foo(object):
    # 实例方法,第一个参数必须是实例对象。一般习惯用self。
    def instance_method(self):
        print("是类{}的实例方法,只能被实例对象调用".format(Foo))
        # 类方法, 第一个参数必须是类 对象。一般习惯使用cls。使用@classmethod装饰器装饰。
    @classmethod
    def class_method(cls):
        print("是类方法")
        # 静态方法,参数没有要求,和类没有绑定关系,就是一个普通的方法            使用@staticmethod装饰器装饰。
    @staticmethod
    def static_method():
        print("是静态方法")
foo = Foo()
# 实例方法只能被实例调用。
foo.instance_method()
print('----------')
# 类方法可以被类或者实例调用。
Foo.class_method()
foo.class_method()
print('----------')
# 静态方法可以被类或者实例调用。
Foo.static_method()
foo.static_method()
对于Python的私有类属性不可以修改,但可以通过方法来实现对私有属性的控制。
class Animal():
name=""
def __init__(self, age, weight , height):
self.__age = age #私有的,不能被访问
#self.age = age #可以被访问
self.weight = weight
self.height = height
def eat(self):
print(self.name+' '+"is eating")
@property
def age(self):
return self.__age
def setAge(self,age):
if isinstance(age,int):
self.__age = age
@age.setter
def age(self,age):
if isinstance(age,int):#实现对属性进行修改时进行检查
self.__age = age cat = Animal(,,)
print(cat.age)
dog = Animal(,,)
#print(dog.__age)#报错,无法访问私有属性
print(dog.age)
dog.setAge()
print(dog.age)
dog.age=#直接赋值
print(dog.age)
具体详解可参考这位博文:https://www.cnblogs.com/ssj0723/p/10392993.html
关于Python的多态和多态性可以看这篇文章,我就不再转载了,https://www.cnblogs.com/luchuangao/p/6739557.html
Python面向对象学习的更多相关文章
- Python面向对象学习 1 (什么是面向对象,面向对象的应用场景,待更新)
		程序设计的三种基本结构: 面向对象,面向过程,函数式编程 1,什么是面向对象编程 面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就 ... 
- python 面向对象学习
		------Python面向对象初 下面写一个类的简单实用,以便方便理解类 #python 3.5环境,解释器在linux需要改变 #阅读手册查询readme文件 #作者:S12-陈金彭 class ... 
- python面向对象学习(二)基本语法
		目录 1. dir内置函数 2. 定义简单的类(只包含方法) 2.1 定义只包含方法的类 2.2 创建对象 2.3 编写第一个面向对象程序 3. 方法中的self参数 3.1 案例改造 -- 给对象添 ... 
- python面向对象学习(一)基本概念
		目录 1. 面向对象基本概念 1.1 过程和函数 1.2 面相过程 和 面相对象 基本概念 2. 类和对象的概念 1.1 类 1.3 对象 3. 类和对象的关系 4. 类的设计 大驼峰命名法 4.1 ... 
- Python面向对象学习2(面向对象的语法和特性,待更新)
		上一个内容我们介绍了面向对象和面向对象场景现在我们来学习下语法和特性 1,面向对象基本语法: # -*- coding:utf-8 -*- # Author: Colin Yao class Dog( ... 
- python面向对象学习笔记(一)
		粘贴一些自学过程中的笔记大纲,源文本在pycharm里面写的,有点乱整理一下,部分内容有待补充,书写不一定100%正确,全当数据备份了. 1.面向对象的特性 #你写代码时什么使用面向对象 #处理比较复 ... 
- python面向对象学习(七)单例
		目录 1. 单例设计模式 单例设计模式的应用场景 2. __new__ 方法 3. Python 中的单例 只执行一次初始化工作 1. 单例设计模式 设计模式 设计模式 是 前人工作的总结和提炼,通常 ... 
- python面向对象学习(六)类属性、类方法、静态方法
		目录 1. 类的结构 1.1 术语 -- 实例 1.2 类是一个特殊的对象 2. 类属性和实例属性 2.1 概念和使用 2.2 属性的获取机制 3. 类方法和静态方法 3.1 类方法 3.2 静态方法 ... 
- python面向对象学习(四)继承
		目录 1. 单继承 1.1 继承的概念.语法和特点 1.2 方法的重写 1.3 父类的 私有属性 和 私有方法 2. 多继承 2.1 多继承的使用注意事项 2.2 新式类与旧式(经典)类 1. 单继承 ... 
随机推荐
- Redis学习之缓存数据类型
			Redis缓存数据类型有5种,分别是String(字符串).List(列表).Hash(哈希).Set(无序,不重复集合).ZSet(sorted set:有序,不重复集合). String(字符串) ... 
- varnish(转http://www.ttlsa.com/nginx/varnish-4-configure-file/)
			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 37 ... 
- 【收集+】DDR5 vs DDR4
			Advantages of Migrating to DDR5 DDR5 is the next evolution in DRAM, bringing a robust list of new fe ... 
- python 取出aws中ip有,zabbix中没有的ip
			#!/usr/bin/env python3# coding=utf-8import requestsimport jsonimport boto3 headers = {'Content-Type' ... 
- Dos中转义符
			遇到个问题: java test R=<file> 11 22 按理说应该打印 R=<file> 11 22 但是,系统报错,写的是系统找不到指定文件. 是"< ... 
- c_数据结构_哈希表
			#include <stdio.h> #include <stdlib.h> #include <string.h> #define ERROR 0 #define ... 
- phonegap 开发指南系列----开始之前(1)
			在基于任何平台(安卓.ios等phonegap支持的平台)上做phonegap开发之前,需要安装 cordova 的 command-line interface (CLI) .CLI详细:http: ... 
- 廖雪峰Java16函数式编程-1Lambda表达式-1Lambda基础
			1. 函数式编程 Java有2类方法: 实例方法:通过实例调用 静态方法:通过类名调用 Java的方法相当于过程式语言的函数 函数式编程(Functional Programing): 把函数作为基本 ... 
- thinkphp 链接数据库
			ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理.目前的数据 ... 
- (组合数学)不定方程的解+猜测——cf997B
			首先要求出三种等价情况 5×1+1×50=1×5+5×105×1+1×50=1×5+5×10 9×5=5×1+4×10 8×5+1×50=9×10 那么可以求出三种关于x5,x10的不可行条件 x ... 
