python3.5入门笔记(9) 类,权限,继承及封装

1、类的使用

class MyClass(object):

    i=123

    def f(self):

        return 'hello,world'

test=MyClass()

print(test.i,test.f())

>>>123 hello,world

2、类的构造

class cltdy:       #定义类,并命名

    n=1000        #类属性,类以内的变量

    def __init__(self,name,age,profession='IT民工'):  #构造函数,类接受外部传入参数依赖构造函数

    #self 将实例化变量名传入类中

    #__init__这个方法一般用于初始化一个类,没有返回值;

        self.name=name

        self.age=age

        self.profession=profession

    def printing_name(self): #类的方法

        print('我的名字:%s' % self.name)

    def printing_age(self):

        print('我的年龄:%s' % self.age)

    def printing_pfsn(self):

        print('我的职业:%s' % self.profession)

----------

test=cltdy('sober',25,'DevOps')  #类的实例化,将参数传入类中,传入参数要大于等于构造函数参数

print('实例化后的内存地址:%s' % test)

test.printing_name()  #调用实例化后类的方法

test.name='moon'  #修改构造函数参数

test.printing_name()

test.printing_pfsn()

print(test.n)

test.n=2000    #修改类属性,只对test生效

print(test.n)

t2=cltdy('jack',22,'student')

print(t2.n)

t2.printing_age()

输出结果:

实例化后的内存地址:<__main__.cltdy object at 0x0000000002EE5710>

我的名字:sober

我的名字:moon

我的职业:DevOps

1000

2000

1000

我的年龄:22

类的访问权限(封装)

1、公有变量(通过点操作符. 来进行访问)

例: def __init__(self,name,age,profession='IT民工'):

        self.name=name

        self.age=age

        self.profession=profession

2、私有变量(要使内部属性不被外部使用,加两个下划线__)

def __init__(self,name,age,profession='IT民工'):

        self.__name=name

        self.__age=age

        self.__profession=profession

--将变量定义为私有变量,可以确保外部代码不能随意修改对象内部的状态,通过访问限制的保护,代码更加安全

--若在类外部直接修改私有变量的值,是不会影响到最终实例(私有)变量的值

3、在外部获取私有变量

在Python中,可以通过get_attrs方法获取类中的私有变量(定义一个get_属性名)

class cltdy:  

    def __init__(self,name,age,profession='IT民工'):

        self.__name=name

        self.__age=age

        self.__profession=profession

    def get_name(self):

        print('我的名字:%s'%self.__name)

    def get_age(self):

        print('我的年龄:%s'%self.__age)

    def get_pfsn(self):

        return self.__profession

    def set_pfsn(self,new_pfsn):

        self.__profession = new_pfsn

------------------

test=cltdy('sober',25,'DevOps') 

print('实例化后的内存地址:%s'%test)

test.get_name() 

test.__name='moon'

print(test.__name)

test.get_name()

test.set_pfsn('测试')

print('修改后的职业',test.get_pfsn())

输出结果: 实例化后的内存地址:<__main__.cltdy object at 0x0000000002EE5668>

我的名字:sober

moon

我的名字:sober

修改后的职业 测试

4、类的私有方法(不能在类外使用)

def __printing_name(self):  #类方法前面加两下划线

   print('我的名字:%s' % self.name)

继承和封装

1、子类的方法__init__()

class car():

    def __init__(self, make, modle, year):

        self.make = make

        self.modle = modle

        self.year = year

        self.odometer_reading = 0

    def get_descriptive_name(self):

        long_name = str(self.year) + " " +self.make + " " + self.modle

        return long_name.title()

2继承类

(1)class Person(object):

    def __init__(self, name, gender):

        self.name = name

        self.gender = gender

定义Student类时,只需要把额外的属性加上,例如score:

class Student(Person):

    def __init__(self, name, gender, score):

        super(Student, self).__init__(name, gender)

        self.score = score

(2) class Person(object):

    def __init__(self, name, gender):

        self.name = name

        self.gender = gender

    def whoAmI(self):

        return 'I am a Person, my name is %s' % self.name

class Student(Person):

    def __init__(self, name, gender, score):

        super(Student, self).__init__(name, gender)

        self.score = score

    def whoAmI(self):

        return 'I am a Student, my name is %s' % self.name

class Teacher(Person):

    def __init__(self, name, gender, course):

        super(Teacher, self).__init__(name, gender)

        self.course = course

    def whoAmI(self):

        return 'I am a Teacher, my name is %s' % self.name

def who_am_i(x):

    print (whoAmI ())

p = Person('Tim', 'Male')

s = Student('Bob', 'Male', 88)

t = Teacher('Alice', 'Female', 'English')

who_am_i(p)

who_am_i(s)

who_am_i(t)

3、封装

第一层面封装(什么都不用做):类名.和实例名.就是访问隐藏属性的接口

第二个层面的封装: 在准备私有化的属性(包括方法、数据)名字前面加两个下划线

获取对象信息

1、type() 获取类型

type(123)                 <class 'int'>

type('123')==type('abc')      True

2、isinstance()  明确继承关系

isinstance((1,2,3),tuple)      True

isinstance((1,2,3),list)        False

isinstance((1,2,3),(list,tuple))  True

3.dir()   返回一个字符串的list

dir(123)

['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']

发布了28 篇原创文章 · 获赞 1 · 访问量 3188

猜你喜欢

转载自blog.csdn.net/pdd51testing/article/details/83822896