[转]python self、类、构造和析构方法 简单学习

self可以理解为自己
类似于C++中的this指针,就是对象自身的意思,在用某个对象调用该方法时,就将该对象作为第一个参数传递给self

python的类中有属性、方法;其中属性可以有私有和公有之分,方法可以对私有属性进行限定和保护,类似于C#中属性的功能。

方法也有私有和公有,__方法前面两个下划线

类,具有相似内部状态和运动规律的实体的集合(统称、抽象)
具有相同属性和行为事物的统称,类是抽象的,使用时找到类的具体存在,使用这个具体存在--对象
类是对象的模板  类:类名、属性、方法

class Dog:
    color=‘red‘ #没有下划线,类外可以通过对象访问:公有
    age=10
    __height=10 #私有属性,这个地方前面加了下划线,代表不可以在外面使用
    def setName(self,newName):
        self.name=newName
        self.__weight=20
    def printheight(self):
        print(‘the height is %d‘%self.__height)
        print(‘the weight is %d‘%self.__weight)

dog=Dog()
dog.setName(‘Bule‘) #调用这个方法后才可以访问私有__weight
print(dog.color)
dog.printheight()  #属性用来保存数据,私有属性体现了封装性
#方法中的self必须为第一个参数,用来接收对象使用

self的作用,可以在方法中将对象替换掉self

class Person( ):
    #构造方法,在创建对象的同时默认调用
    def __init__(self):
        self.country=‘Chinese‘
    def __del__(self):
        print(‘析构方法‘)#当删除一个对象时,默认调用析构方法

    __name=‘Lily‘
    __age=12
    """docstring for ClassName"""

    def __getName(self):#在这个方法中可以对属性进行一些限定,类似于C#中的属性功能
        return self.__name
    def __getAge(self):#对属性进行限定和保护
        if self.__age>18:
              return self.__age
        else:
              return 18
    def getNameAge(self):
        name1=self.__getName()
        age1=self.__getAge()
        print(‘name is %s,age is %d‘%(name1,age1))

person=Person()
person.getNameAge()
#print(p.getAge(),p.getName())#两个方法是私有的,不可以在类外面调用
del person #调用析构方法

方法可以返回元组def test: return(100,200,200)  a,b,c=test()

class Teacher:
    age=30
    def __init__(self):
        print(‘父类的构造方法‘)
    def showName(self,name):
        self.name=name
        print(‘Name is %s‘%self.name)
    def showAge(self,age):
        self.age=age
        print(‘Age is %d‘%self.age)

class Student(Teacher ):
    #pass#子类继承父类,父类的东西子类都包含,只写pass
    def __init__(self):
        Teacher.__init__(self)  #根据这两行的先后顺序决定先执行父类还是子类方法
        print(‘子类重写父类的方法 ,子类的构造方法‘)

    def Special(self):
        print(‘Student is a child‘)
class Doctor():
    pass

#class pel(Teacher,Student):#多继承,有错误Cannot create a consistent method resolution,继承太多
#    pass
class pe2(Teacher,Doctor):
    pass

teacher=Teacher()
student=Student()

teacher.showAge(30)
teacher.showName(‘Mr li‘)
#子类的方法名与父类的方法名相同,重写。子类的对象会调用子类的
#多态的概念应用于Java和C#这一类强类型语言中,而Python崇尚‘鸭子类型’

原文地址:https://www.cnblogs.com/cheerone/p/9194753.html

时间: 2024-07-31 12:46:36

[转]python self、类、构造和析构方法 简单学习的相关文章

【python】-- 类的装饰器方法、特殊成员方法

装饰器方法 类的另外的特性,装饰器方法:静态方法(staticmethod).类方法(classmethod).属性方法(property) 一.静态方法 在方法名前加上@staticmethod装饰器,表示此方法为静态方法 class Dog(object): def __init__(self,name): self.name = name @staticmethod #在方法前加上staticmethod 装饰器定义静态方法 def eat(): print("dog is eating&

知识点:构造和析构方法 __new__ , __init__ , __del__

1:__new__ 类创建对象的一个执行的方法,一般不需要重写这个函数.当继承的类是不可变,但是又想修改该对象. 基本语法  def __new__(cls ,[args,]]) ####写一个将字母全部大写的类#### class Capstr(str): def __new__(cls , string): string = string.upper() return str.__new__(cls , string) print(Capstr("marian")) ####写一个

Python进阶-----类的内置方法__getattribute__

__getattribute__ 方法功能: 1 调用属性会触发该功能,属性存在则会返回相应的值:2 如果属性不存在则会抛出异常AttributeError,所以可以自定义异常信息3 存在__getattr__,若有异常出现则会传递给__getattr__用来接收,执行操作 class Foo: def __init__(self,x): self.x=x def __getattr__(self, item): print('执行的是我') # return self.__dict__[ite

python第一篇:正则表达式的方法简单归纳

首先先对一些常用的匹配模式进行一下介绍及互相认识一下,当然了可能它认识我,但我绝对还不认识它... ******************************************** 元字符 [ . ^ $ * + ? {} [] \ | () ] ******************************************** 1.[.] 匹配任意1个字符,除了换行符(\n). 要匹配包括'\n'在内的任何字符,就使用'[.\n]'的模式 例: import re print(r

C++我们必须要了解的事之具体做法(1)——构造、复制构造、析构、赋值操作符背后的故事

1. C++默认调用哪些函数 当类中的数据成员类型是trival数据类型(就是原c语言的struct类型)时,编译器默认不会创建ctor. copy ctor.assign operator.dctor. 只有在这些函数被调用时,编译器才会创建他们. 这时候我们要自己创建构造函数,初始化内置数据类型.一般我们不需要复制控制函数,当需要时编译器合成的就很好.一般编译器合成的复制控制函数只是简单的复制成员,若能满足要求就不需要自己写. 当类中含有引用.const成员时,必须在初始化列表中初始化成员.

蓝鸥Unity开发基础二——课时13 析构方法

析构方法--在对象销毁时调用,用来释放内存的 析构方法在对象销毁时调用,用于释放内存空间 一个类只有一个析构方法 析构方法没有返回值和参数,不能进行重载 析构方法有系统自动调用,不能手动调用 析构方法没有修饰符 using System; namespace Lesson_13{    public class Person{    public string name;    public  int age; //构造方法--负责初始化对象        //1.构造方法的方法名必须和类名一致

php析构方法关于栈的问题

1 <?php 2 class test{ 3 var $name; 4 var $sex; 5 var $age; 6 7 function __construct( $name, $sex ,$age ) 8 { 9 $this->name = $name; 10 $this->sex = $sex; 11 $this->age = $age; 12 } 13 14 function __destruct() 15 { 16 echo "再见".$this-

python魔法方法之构造和析构

python的类实例化的时候会默认执行该类的构造方法_init_ 1 class Rectangle: 2 def __init__(self,x,y): 3 self.x=x 4 self.y=y 5 def getArea(self): 6 return self.x * self.y 7 r = Rectangle(5,10) 8 print(r.getArea()) python中一个类被创建时最先执行的方法是new方法,当需要修改某些不可变类型的对象时需要重写他的new方法 1 #重写

PHP面向对象基本概念 类与对象 静态属性 构造/析构方法

1.传统的面向过程和现代面向对象  传统面向过程:是指把将要完成的工作分为若干个步骤一步一步的完成  现代面向对象:是指将要完成的工作拆分为一个一个的对象的任务(功能)每个对象独自完成自己的任务 可以理解为: 一个大扫除 面向过程就是一个人干完大扫除 面向对象就是 一个人扫地 一个人拖地2.面向对象的基本概念  三大特性:封装 继承 多态  类与对象:          张三是一个对象,李四是一个对象 他们都隶属于人这个类         类:描述某一些具有共同特征的物体的概念