美文网首页
Python基础(7)——类

Python基础(7)——类

作者: _羊羽_ | 来源:发表于2018-07-11 01:58 被阅读766次

    定义类

    定义类使用class关键字,class 后面紧跟着类名称,类名称通常首字母大写,类名称后面(object)代表当前的类的继承自object类。类主要包含属性和方法

    具体定义stduent类

    class Student(object):
        def getName(self):
            print("获取姓名")
        
        def setName(self):
            print("设置姓名")
    

    实例对象

    对象名 = 类名()
    
    class Student:
        def getName(self):
            print("获取姓名")
    
        def setName(self):
            print("设置姓名")
    
    s = Student()
    s.getName()
    s.setName()
    # 获取姓名
    # 设置姓名
    

    构造函数

    __init__()方法是在创建对象后,就立刻被默认调用了,一个类中可以定义多个构造函数,但是实例化时只实例化最后一个构造方法,后面的构造方法会覆盖前面的构造方法。

     def __init__(self):
            self.Name = ""
            self.age = 0
    

    属性

    在属性名前面加了2个下划线'__',则表明该属性是私有属性,否则为公有属性

    class Student:
        def __init__(self,name):
            self.__name = name
    
        def getName(self):
            return self.__name
    
        def setName(self,name):
            self.__name = name
    
    
    s = Student("init name")
    print(s.getName())
    s.setName("new name")
    print(s.getName())
    

    私有属性

    它是以属性命名方式来区分,如果在属性名前面加了2个下划线'__',则表明该属性是私有属性,否则为公有属性(方法也是一样,方法名前面加了2个下划线的话表示该方法是私有的,否则为公有的)。

    class People(object):
    
        def __init__(self,name):
            self.__name = name
        def setName (self, newName):
            if len(newName)>=5:
                self.__name = newName
            else:
                print("error 名字长度需要大于或者等于5")
        def getName(self):
            return self.__name
    
    xiaoming = People("xiaoming")
    print(xiaoming.getName())
    xiaoming.setName("wangwu")
    print(xiaoming.getName())
    

    类属性

    在前面的例子中我们接触到的就是实例属性(对象属性),顾名思义,类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本,这个和C++中类的静态成员变量有点类似。对于公有的类属性,在类外可以通过类对象和实例对象访问

    类方法

    是类对象所拥有的方法,需要用修饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数(当然可以用其他名称的变量作为其第一个参数,但是大部分人都习惯以'cls'作为第一个参数的名字,就最好用'cls'了),能够通过实例对象和类对象去访问。

    类方法和静态方法

    class People(object):
           country ="China"
    
           @classmethod
           def getCountry(cls):
               return cls.country
    
           @staticmethod
           def language():
               return "chinese"
    
    p = People()
    print(p.getCountry())
    print(People.getCountry())
    print(People.language())
    

    继承

    class Person(object):
        def __init__(self,name,gender,age):
            self.name = name
            self.gender = gender
            self.__age = age
        @property
        def get_age(self):
            return self.__age
    
    
    
    class Student(Person):
    
        def __init__(self,name,gender,age,score):
            super(Student,self).__init__(name,gender,age)
            self.score = score
    
    
    
    stu = Student("BX","m",26,90)
    print(stu.__dict__)
    print(stu.get_age)
    #{'name': 'BX', 'gender': 'm', '_Person__age': 26, 'score': 90}
    #26
    

    私有方法

    私有方法和私有属性一样 都是__开头作为私有方法

    多态

    当子类和父类有相同的方法时,子类的方法会覆盖父类的方法,当子类对象只会调用子类的方法,这就是多态

    class Animal(object):
        def cry(self):
            print("动物叫")
    
    class Dog(Animal):
        def cry(self):
            print("旺旺")
    
    
    class Cat(Animal):
        def cry(self):
            print("喵喵")
    
    a = Animal()
    a.cry()
    d = Dog()
    d.cry()
    c = Cat()
    c.cry()
    

    相关文章

      网友评论

          本文标题:Python基础(7)——类

          本文链接:https://www.haomeiwen.com/subject/fwnkqftx.html